我做了一个习俗 ImageView 支持基本滚动通过调用 View.scrollBy() 在一个 GestureDetector. 。我想添加一些有关滚动界限的反馈,因此我启用了褪色:

setVerticalFadingEdgeEnabled(true);
setHorizontalFadingEdgeEnabled(true);

但是褪色正如我所期望的,只有在左边缘和左边缘,而底部和右侧则不会褪色。我敢肯定,这些边缘不会偏离屏幕,因为该视图设置为填充高度和宽度。那怎么了?


编辑:仅启用垂直/水平褪色边缘证实只有顶部/左边缘被绘制。现在我想阅读 view.java(6870 A ON)...

有帮助吗?

解决方案

看来问题在 getBottomFadingEdgeStrength()getRightFadingEdgeStrength(), ,或者更好的是,我没有覆盖它们来使用自定义视图。

这些受保护的方法告诉视图 draw() 何时绘制褪色(以及多么强烈 - 看到什么 ScrollView 当您接近滚动限制时)。

对于顶部和左边缘,这很容易,因为极限是 0 在情况下,默认实现都起作用(以/关闭方式),但是对于其他两个,我需要覆盖方法以考虑自己的滚动界限(在我的情况下,是可绘制的尺寸)。

其他提示

一个知道这是旧的,但是与覆盖方法相比,快速工作是在XML中使用梯度和相对布局。请在下面找到一个抽象的版本,您不能复制并粘贴它,但它应该传达消息。对不起,我手工打了全部。

<!-- object with fading edges in layout -->
<RelativeLayout>
    <ImageView>
    <LinearLayout background="gradient_left" layout_alignParentStart="true">
    <LinearLayout background="gradient_right" layout_alignParentEnd="true">
</RelativeLayout>


<!-- gradient left xml in drawable-->
<shape>
    <gradient startColor="#000" endColor:"@android:color/transparent" angle="0"
</shape>


<!-- gradient right xml in drawable -->
<shape>
   <gradient startColor="#000" endColor:"@android:color/transparent" angle="180"
</shape>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top