如何使 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 褪色边缘始终可见?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Scrollview 滚动的背景

tkinter - 使用平滑的“褪色”动画使帧向右隐藏

Arduino中的定时褪色

ScrollView 根本不滚动

如何使 ScrollView 子项适合 Nativescript-Vue 中 ScrollView 的大小?

如何使 scrollView 滚动 ImageView 直到中心?