美文网首页Android
android 滚动条ScrollBar的使用

android 滚动条ScrollBar的使用

作者: 青年小灰灰 | 来源:发表于2017-02-22 21:56 被阅读1379次

如何在自己定制的View的中显示scrollbar?
首先我说的这个scrollbar,指的是滑动view右侧的滚动条,比如RecyclerView、ScrollView等。

scrollbar顾名思义,只有滚动的view才能有这个bar,那问题就来了,如果是我们自定义的一个view,然后有需要在自己的view里面显示自己scrollbar的需求,这该怎么办呢
当时接到这个需求的时候一脸懵逼,无可下手,研究了一番终于小有成就

原理:
首先一个令我惊讶的是View内部早就给我们提供了scrollbar,只是我们平时不用,没显示而已,那怎么显示呢,API提供了一个awakenScrollBars的方法,我们只要调用一下,就显示了,真的很神奇

显示的条件:
必须是一个可以滑动的view,可以滑动很容易理解,那是如何体现在代码中的呢?

View内部提供的方法

我们只要实现了这三个方法,就能代表是可以滑动的,
range、offset、extent这个概念是什么意思呢

offset、extent、range关系

概念很清晰了,滑动的条件只要range > extent,就可以代表view可以滑动,那offset的范围便是
0 ~(range - extent)。
说了这么多,我直接上demo吧

自定义的view

public class SView extends View {
    public SView(Context context) {
        super(context);
    }

    public SView(Context context,AttributeSet attrs) {
        super(context,attrs);
    }
    
    public SView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context,attrs,defStyleAttr);
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // 在这里我测试,显示滚动条
        awakenScrollBars();
        return super.onTouchEvent(event);
    }
    
    @Override
    protected int computeVerticalScrollExtent() {
        return 2000;
    }
    
    @Override
    protected int computeVerticalScrollOffset() {
        return 1000;
    }
    
    @Override
    protected int computeVerticalScrollRange() {
        return 3000;
    }
}

现在range是3000,extent是2000,offset的范围就是0 ~ 1000。

xml布局中

<android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:fadeScrollbars="true"/>

(ps:在这里,我仅仅是拿着竖直方向举例子,水平方向同理)

欢迎大家交流
-end

相关文章

网友评论

    本文标题:android 滚动条ScrollBar的使用

    本文链接:https://www.haomeiwen.com/subject/twfvwttx.html