我制作了一个自定义ImageView
,支持在View.scrollBy()
中调用GestureDetector
进行基本滚动。我想添加一些关于滚动范围的反馈,所以我启用了淡化:
setVerticalFadingEdgeEnabled(true);
setHorizontalFadingEdgeEnabled(true);
但是褪色的效果正如我所预期的那样仅在顶部和左侧边缘上,而底部和右侧则不会褪色。我确信这些边缘不在屏幕外,因为视图在高度和宽度上设置为fill_parent。那有什么不对?
编辑:仅启用垂直/水平渐变边缘确认仅绘制顶部/左侧边缘。现在我正在尝试阅读View.java (6870 an on) ...
答案 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>