我有一个 RelativeLayout,它包含其他按边距定位的布局( View )。我还有一个 GestureDetector,它检测滚动并为 RelativeLayout 调用 scrollBy():
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
int dx = (int) distanceX;
int dy = (int) distanceY;
sdx+= dx; sdy+= dy;
container.scrollBy(dx, dy);
return false;
}
当我滚动它时,我遇到了一个问题:
如果 subview 部分位于屏幕外,我会在向右或底部滑动时裁剪它。但是,如果某些 View 在第一时间是完全不可见的,那么在显示时它们看起来会很好。问题是什么?也许我需要向容器添加一些属性(尝试过 android:clipChildren、android:clipToPadding、android:isScrollContainer)?请帮助我!
谢谢
最佳答案
默认情况下,没有适当的机制告诉父级的 subview 他们需要在滚动事件上重绘自己。 SDK 中的可滚动小部件以多种特定方式处理此问题。您最简单的选择可能是子类化您的 RelativeLayout
容器,这样您就可以覆盖 onScrollChanged()
并使用此回调来调用 invalidate()
。这将告诉容器(以及随后的子容器)它需要在滚动后重绘。
您可以在手势回调中调用 container.scrollBy()
后直接调用 container.invalidate()
来逃脱。我不确定是否过早地调用了 invalidate()
;尽管如果您尝试进行任何平滑滚动,此方法也会崩溃。
HTH
关于Android 在 RelativeLayout 中裁剪 View 的不可见部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9165950/