我想知道我的文本视图是否在可见屏幕区域内。
我把链接看作:
Android - Get the visible area of a view?
Android: how to check if a View inside of ScrollView is visible?
但对我来说什么都不管用。
我用来检查的代码是

    Rect rect = new Rect();
    //textview intialized in onCreate as text1
    text1.getHitRect(rect);
    text1.measure(0, 0);
    //layout is the parent layout (linear) in which i am adding the text view
    Rect acctualView = new Rect(Math.round(layout.getX()), Math.round(layout.getY()),
            Math.round(layout.getX() + layout.getWidth()), Math.round(layout.getY()         +layout.getHeight()));

    if(Rect.intersects(acctualView, rect))
    {
        Toast.makeText(context, "visible", Toast.LENGTH_LONG).show();
    }else {
        Toast.makeText(context, "Not visible ", Toast.LENGTH_LONG).show();
    }

textview和layout的每个宽度和高度都给我0“零”,
请让我知道如何解决这个问题,并知道视图是否在可见区域内
这是我完整的活动代码
public class MainActivity extends Activity {

private TextView text1, text2, text3, text4, text5, text6;
private Context context;
private LinearLayout layout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    context = getLayoutInflater().getContext();
    layout = (LinearLayout) findViewById(R.id.parentLayout);
    setTextViews();
    checkViewAndUpdate();

}

private void checkViewAndUpdate() {

    Rect rect = new Rect();
    layout.getHitRect(rect);
    if (text1.getLocalVisibleRect(rect)) {
        Toast.makeText(context, "visible", Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(context, "Not visible", Toast.LENGTH_LONG).show();
    }

}

private void setTextViews() {

    text1 = new TextView(context);
    text2 = new TextView(context);
    text3 = new TextView(context);
    text4 = new TextView(context);
    text5 = new TextView(context);
    text6 = new TextView(context);

    text1.setText("text1");
    text2.setText("text2");
    text3.setText("text3");
    text4.setText("text4");
    text5.setText("text5");
    text6.setText("text6");

    text1.setTextSize(30);
    text2.setTextSize(30);
    text3.setTextSize(30);
    text4.setTextSize(30);
    text5.setTextSize(30);
    text6.setTextSize(30);

    //layout.removeAllViews();

    layout.addView(text1);
    layout.addView(text2);
    layout.addView(text3);
    layout.addView(text4);
    layout.addView(text5);
    layout.addView(text6);

}

}
我的布局只包含linearlayout(空)

最佳答案

正如我在评论中写的,检查onCreate处的可见rect将不起作用。
onCreate结束时尝试此代码(而不是调用checkAndUpdate() directly)。

 layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                checkViewAndUpdate();
            }
        });

但是,如果在onCreate处添加视图,则视图布局不会完成。是的,这次用户看不到实际的活动,视图的实际大小没有设置。
onGlobalLayout将在视图布局结束时调用(活动可见)。
在那个时候,我们现在可以得到他们的大小和位置!
仅供参考,您可以通过在layout.getViewTreeObserver().removeOnGlobalLayoutListener(this)中调用onGlobalLayout()来删除此侦听器。

10-07 16:23
查看更多