【问题标题】: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>
      

      【讨论】:

        最近更新 更多