褪色边缘仅在顶部和左侧工作

时间:2011-01-17 15:32:52

标签: android scroll custom-view fading

我制作了一个自定义ImageView,支持在View.scrollBy()中调用GestureDetector进行基本滚动。我想添加一些关于滚动范围的反馈,所以我启用了淡化:

setVerticalFadingEdgeEnabled(true);
setHorizontalFadingEdgeEnabled(true);

但是褪色的效果正如我所预期的那样仅在顶部和左侧边缘上,而底部和右侧则不会褪色。我确信这些边缘不在屏幕外,因为视图在高度和宽度上设置为fill_parent。那有什么不对?


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

2 个答案:

答案 0 :(得分:4)

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

这些受保护的方法告诉视图draw()什么时候绘制fadings(以及有多强烈 - 看看ScrollView在接近滚动限制时的作用。)

对于上边缘和左边缘,它很容易,因为在两种情况下限制都是0并且默认实现工作(以其开/关方式),但对于其他两个,我需要覆盖要采用的方法帐户我自己的滚动范围(在我的情况下,可绘制的尺寸)。

答案 1 :(得分: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>