在标题(在屏幕顶部)和选项卡(在屏幕底部)之间有滚动 View 。我想知道ScrollView内部的ImageView在手机屏幕窗口上是否完全可见。
最佳答案
我建议采取以下方式(该方法类似于this question中的一种)。
例如。您具有以下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>
然后, Activity 可能如下所示:
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
doesn't care about layout_width and layout_height of childs。关于android - 如何知道Scroll in View是否完全可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16669887/