博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义HorizontalScrollView的scrollBar
阅读量:6415 次
发布时间:2019-06-23

本文共 2089 字,大约阅读时间需要 6 分钟。

尊重劳动成果,转载请标明出处 

android滑动组件的scrollBar,看了不是很顺眼,没办法,因为项目需求,得自定义一个。

 

1、自定义一个View,继承HorizontalScrollView

 

2、根据需求自己绘画出一个scrollBar,可以在dispatchDraw()中绘制,实践证明,在onDraw()方法中绘制无效

/**  * 绘制滑动条的画笔  *  * @param context  */ private Paint mPaint;
mPaint = new Paint();mPaint.setColor(getResources().getColor(R.color.gb_theme));mPaint.setStyle(Paint.Style.FILL);

 

/**     * 画底部滑动条,用onDraw()方法无效     *     * @param canvas     */    @Override    protected void dispatchDraw(Canvas canvas) {        super.dispatchDraw(canvas);        canvas.drawRect(scrollBarLeft, getHeight() - scrollBarHeight, scrollBarLeft + scrollBarWidth, getHeight(), mPaint);    }
scrollBarLeft为滑动条距离屏幕左边距的距离
scrollBarWidth为滑动条的宽度
scrollBarHeight为滑动条的高度
getHeight()为我们自定义view的高度 这样我们就在自定义HorizontalScrollView的底部画出了滑动条
3、接下来我们需要做的就是监听HorizontalScrollView的滑动,让滑动条也跟着滑动,想到滑动,我们自然会想到下面这个方法
protected void onScrollChanged(int l, int t, int oldl, int oldt) {        super.onScrollChanged(l, t, oldl, oldt);}

这个方法具体啥含义呢?怎么用呢?里面的参数有代表啥呢?请看我另一篇博客:

 

int saveDistance = 0; @Override    protected void onScrollChanged(int l, int t, int oldl, int oldt) {        super.onScrollChanged(l, t, oldl, oldt);        //当快速抛动,手指离开屏幕时,就会出现l 与 oldl 重复出现的情况,         //而且都是相邻的两次,原因还不知道,若是哪位朋友知道了可以告诉我        //这种情况下不要去绘制滑动条        if (saveDistance == l)            return;        else            saveDistance = l;        //滑动条的左边缘x坐标应该为HorizontalScrollView滑动的距离乘以滑动条的滑动比例,         // 加上HorizontalScrollView滑动的距离        // (因为滑动条也会跟着滑动,所以应该抵消滑动条被带着滑动的距离)        scrollBarLeft += ((l - oldl) + (l - oldl) * xPos);  //重新绘制         invalidate();    }

 

xPos为啥?xPos为滑动比例,因为我们的屏幕小固定,但是HorizontalScrollView的宽度可以超出了整个屏幕,看下图:

 

 

所以我们的滑动比例应该这样算

mWidth//滑动栏的宽度  mScreenWidth//屏幕的高度  scrollBarStartDis//滑动条开始时候距离屏幕左边的举例,假设滑动到最右边距离屏幕也为这个距离 //滑动条的滑动范围 scrollBarLeft ~ mScreenWitdh-scroolBarWidth-scrollBarStartDis-scrollBarStartDisfloat rangeBar = mScreenWidth - scrollBarWidth - scrollBarStartDis * 2;//水平滑动栏的滑动范围float rangeScrollView = mWidth - mScreenWidth;//滑动比例xPos = rangeBar/(rangeScrollView * 1.0f);

 

到此我们就已经结束了scrollBar的绘制了

 

转载于:https://www.cnblogs.com/tangZH/p/8423803.html

你可能感兴趣的文章
Cygwin + OpenSSH FOR Windows的安装配置
查看>>
咏南中间件支持手机客户端
查看>>
fastscript增加三方控件之二
查看>>
Windows Vista RTM 你准备好了么?
查看>>
Tensorflow Serving 模型部署和服务
查看>>
Java Web开发详解——XML+DTD+XML Schema+XSLT+Servlet 3.0+JSP 2.2深入剖析与实例应用
查看>>
topcoder srm 680 div1 -3
查看>>
具体数学第二版第四章习题(1)
查看>>
高效前端优化工具--Fiddler入门教程
查看>>
【翻译】我钟爱的HTML5和CSS3在线工具
查看>>
Java多线程学习(吐血超详细总结)
查看>>
css3 变形
查看>>
Win7 64bit 安装Mysql5 出错 无法启动服务。
查看>>
嵌入式 H264参数语法文档: SPS、PPS、IDR以及NALU编码规律
查看>>
初识Opserver,StackExchange的监控解决方案
查看>>
给大家讲解一下JavaScript与后台Java天衣无缝相结合
查看>>
探索HTML5之本地文件系统API - File System API
查看>>
javascript有用代码块(1)
查看>>
libevent 笔记
查看>>
PHP实现人人OAuth登录和API调用
查看>>