如何使 Android ScrollView 褪色边缘始终可见?
Posted
技术标签:
【中文标题】如何使 Android ScrollView 褪色边缘始终可见?【英文标题】:How to make Android ScrollView fading edge always visible? 【发布时间】:2011-10-16 22:08:59 【问题描述】:默认情况下,scrollview 的淡入淡出边缘只有在可以朝那个方向滚动时才可见。如何让它始终可见?
我不想在顶部放置任何可绘制对象或类似的东西。我想使用内置的淡入淡出边缘来完成它,可能是通过覆盖一些滚动视图函数。
【问题讨论】:
您能告诉我,您为什么要这样做?淡入淡出效果是专门为通知用户他可以朝那个方向滚动而设计的。如果您将其更改为始终显示淡入淡出的边缘,用户会认为他可以向任何方向滚动,并在不可能的情况下认为某些内容已损坏。 【参考方案1】:是的,扩展 ScrollView 并覆盖这些方法(基于 Donut-release2):
@Override
protected float getTopFadingEdgeStrength()
if (getChildCount() == 0)
return 0.0f;
return 1.0f;
@Override
protected float getBottomFadingEdgeStrength()
if (getChildCount() == 0)
return 0.0f;
return 1.0f;
为了比较起见,这是原始代码,当您接近列表末尾时,它会缩短褪色边缘:
@Override
protected float getTopFadingEdgeStrength()
if (getChildCount() == 0)
return 0.0f;
final int length = getVerticalFadingEdgeLength();
if (mScrollY < length)
return mScrollY / (float) length;
return 1.0f;
@Override
protected float getBottomFadingEdgeStrength()
if (getChildCount() == 0)
return 0.0f;
final int length = getVerticalFadingEdgeLength();
final int bottomEdge = getHeight() - mPaddingBottom;
final int span = getChildAt(0).getBottom() - mScrollY - bottomEdge;
if (span < length)
return span / (float) length;
return 1.0f;
【讨论】:
【参考方案2】:您也可以使用以下代码:
public class TopFadeEdgeScrollView extends ScrollView
public TopFadeEdgeScrollView(Context context)
super(context);
public TopFadeEdgeScrollView(Context context, AttributeSet attrs)
super(context, attrs);
public TopFadeEdgeScrollView(Context context, AttributeSet attrs, int defStyleAttr)
super(context, attrs, defStyleAttr);
@Override
protected float getBottomFadingEdgeStrength()
return 0.0f;
【讨论】:
以上是关于如何使 Android ScrollView 褪色边缘始终可见?的主要内容,如果未能解决你的问题,请参考以下文章