如何知道Scroll里面的View是完全可见还是不可见

标题(屏幕顶部)和标签(屏幕底部)之间有滚动视图。 我想知道在ScrollView里面的ImageView是否在电话屏幕上完全可见或不可见。


我会建议采用以下方法(该方法与此问题中的方法类似)。

例如你有以下的XML(我不知道什么是标题和标签,所以他们错过了):

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:id="@+id/scroller">
        <ImageView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_gravity="center"
            android:id="@+id/image"
            android:src="@drawable/image001"
            android:scaleType="fitXY" />
</ScrollView>

然后,活动可能如下所示:

public class MyActivity extends Activity {

    private static final String TAG = "MyActivity";

    private ScrollView mScroll = null;
    private ImageView mImage = null;

    private ViewTreeObserver.OnGlobalLayoutListener mLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            final Rect imageRect = new Rect(0, 0, mImage.getWidth(), mImage.getHeight());
            final Rect imageVisibleRect = new Rect(imageRect);

            mScroll.getChildVisibleRect(mImage, imageVisibleRect, null);

            if (imageVisibleRect.height() < imageRect.height() ||
                    imageVisibleRect.width() < imageRect.width()) {
                Log.w(TAG, "image is not fully visible");
            } else {
                Log.w(TAG, "image is fully visible");
            }

            mScroll.getViewTreeObserver().removeOnGlobalLayoutListener(mLayoutListener);
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Show the layout with the test view
        setContentView(R.layout.main);

        mScroll = (ScrollView) findViewById(R.id.scroller);
        mImage = (ImageView) findViewById(R.id.image);

        mScroll.getViewTreeObserver().addOnGlobalLayoutListener(mLayoutListener);
    }
}

如果图像小,则会记录:图像完全可见。

但是,您应该了解以下不一致性(根据我的理解):如果您的图像尺寸较大,但是缩放比例(例如,您设置了android:layout_width="wrap_content" ),但实际ImageView高度将作为图像的全部高度(并且ScrollView将会滚动),因此可能需要adjustViewBounds。 这种行为的原因是FrameLayout不关心childs的layout_width和layout_height。

链接地址: http://www.djcxy.com/p/13713.html

上一篇: How to know whether View inside Scroll is Visible completely or no

下一篇: Distinguish swipe and click in Angular