android 滚动条ScrollBar的使用

如何在自己定制的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 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,562评论 25 709
  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 46,957评论 22 665
  • 简介: 提供一个让有限的窗口变成一个大数据集的灵活视图。 术语表: Adapter:RecyclerView的子类...
    酷泡泡阅读 5,258评论 0 16
  • (图:我订阅的各种微信公众号) 社会化媒体的兴起,使得“自媒体”这一新的媒体形式越来越普遍,借助博客、微博之类的平...
    刘淼阅读 8,893评论 25 85
  • 宝贝,其实我是一个有点小男人的人,看到你跟其他男生关系好我就会有点小吃醋。不过,我会安慰自己。她只有我一个男人,她...
    握着荆条阅读 225评论 0 0