褪色的边缘仅在顶部和左上工作
-
12-10-2019 - |
题
我做了一个习俗 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>
不隶属于 StackOverflow