3

我做了一个自定义ImageView,它支持View.scrollBy()GestureDetector. 我想添加一些关于达到滚动边界的反馈,所以我启用了淡入淡出:

setVerticalFadingEdgeEnabled(true);
setHorizontalFadingEdgeEnabled(true);

但是褪色仅在顶部和左侧边缘按我预期的方式起作用,而底部和右侧则不会褪色。我确定这些边缘不会离开屏幕,因为视图的高度和宽度设置为 fill_parent。那么有什么问题呢?


编辑:仅启用垂直/水平褪色边缘确认仅绘制顶部/左侧边缘。现在我正在尝试阅读View.java (6870 an on) ...

4

2 回答 2

4

似乎问题在于getBottomFadingEdgeStrength()and getRightFadingEdgeStrength(),或者更好,因为我没有覆盖它们以使用我的自定义视图。

这些受保护的方法告诉视图draw()何时绘制淡入淡出(以及强度如何——看看ScrollView当你接近滚动限制时 a 做了什么)。

对于顶部和左侧边缘,这很容易,因为0在这两种情况下都有限制并且默认实现工作(以它的开/关方式),但对于其他两个我需要重写方法以考虑我自己的滚动边界(在我的情况下,可绘制尺寸)。

于 2011-01-17T22:18:02.637 回答
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>
于 2017-02-15T19:09:17.053 回答