【问题标题】:fading edges working only on top and left褪色边缘仅在顶部和左侧起作用
【发布时间】:2011-01-17 15:32:52
【问题描述】:
我制作了一个自定义ImageView,它支持在GestureDetector 中对View.scrollBy() 的调用进行基本滚动。我想添加一些关于达到滚动边界的反馈,所以我启用了淡入淡出:
setVerticalFadingEdgeEnabled(true);
setHorizontalFadingEdgeEnabled(true);
但褪色仅在顶部和左侧边缘按我预期工作,而底部和右侧不会褪色。我确定这些边缘不会离开屏幕,因为视图的高度和宽度设置为 fill_parent。那怎么了?
编辑:仅启用垂直/水平渐变边缘确认仅绘制顶部/左侧边缘。现在我正在尝试阅读View.java (6870 an on)...
【问题讨论】:
标签:
android
scroll
custom-view
fading
【解决方案1】:
似乎问题出在getBottomFadingEdgeStrength() 和getRightFadingEdgeStrength(),或者更好,因为我没有覆盖它们以使用我的自定义视图。
这些受保护的方法告诉视图的draw() 何时绘制渐变(以及强度有多强 - 看看当您接近滚动限制时 ScrollView 做了什么)。
对于顶部和左侧边缘,这很容易,因为在这两种情况下限制都是0,并且默认实现有效(以其开/关方式),但对于其他两个我需要重写方法以考虑到我的自己的滚动边界(在我的例子中是可绘制的尺寸)。
【解决方案2】:
知道这很旧,但与覆盖方法相比,一个快速的解决方法是在您的 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>