How to check if TextView is inside Android visible screen

I wanted to know if my text image is within the visible area of ​​the screen or not.

I looked at the links like: Android - get visible viewing area? Android: how to check if view is visible inside ScrollView?

But nothing works for me.

The code I used to verify

    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();
    }

Each width and height of the text and layout gives me 0 "zero",

Please let me know how to fix this and find out if the view is inside the visible area or not.

Here is my full activity code

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);

}

}

and my layout contains only LinearLayout (empty)

+4
source share
3 answers

, onCreate .
onCreate ( checkAndUpdate() directly).

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

, onCreate. , , .
onGlobalLayout , ( ).
  !

FYI, , layout.getViewTreeObserver().removeOnGlobalLayoutListener(this) onGlobalLayout()

+3

:

if (yourView.getParent().getVisibility() == View.VISIBLE) {
    // visible
} else{
    // hiden
}

:

Rect rect = new Rect();
parentView.getHitRect(rect);
if (imageView.getLocalVisibleRect(rect)) {
    // imageView is within the visible window
} else {
    // imageView is not within the visible window
}
+1

for?

for(int i = 0; i < 6; i++){
 TextView tv = new   TextView(context);
 tv.setTextSize(30);
 layout.addView(tv);
 //Maybe set some listeners...
}
0

All Articles