Android 在 RelativeLayout 中裁剪 View 的不可见部分

标签 android scroll android-relativelayout crop

我有一个 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;
 }

当我滚动它时,我遇到了一个问题:

enter image description here

如果 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/

相关文章:

javascript - 滚动到底部不触发行为

javascript - 更新 : Add more control: hide header on scroll and work from a certain width size

android - 如何从 onCreateView 外部重新 inflated layout

java - 如何以编程方式设置相对布局中 TextViews 的对齐父右属性

安卓 : Read Facebook wall messages (public)

android - 如何检查 firebase 查询是否为空

安卓工作室 : Core app with different wrapper for every customer

android - layout-land 不选择横向布局 xml

android - 在 RelativeLayout 中垂直居中两个 TextView

jquery - 在主干 View 的滚动窗口中显示页面顶部