在线咨询
QQ咨询
服务热线
服务热线:13125520620
TOP

自定义HorizontalScrollView的scrollBar

发布时间:2018-2-9 浏览:3122

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();
    }
所以我们的滑动比例应该这样算
 
复制代码
 mWidth//滑动栏的宽度
 mScreenWidth//屏幕的高度
 scrollBarStartDis//滑动条开始时候距离屏幕左边的举例,假设滑动到最右边距离屏幕也为这个距离
 
 
//滑动条的滑动范围 scrollBarLeft ~ mScreenWitdh-scroolBarWidth-scrollBarStartDis-scrollBarStartDis
float rangeBar = mScreenWidth - scrollBarWidth - scrollBarStartDis * 2;
//水平滑动栏的滑动范围
float rangeScrollView = mWidth - mScreenWidth;
//滑动比例
xPos = rangeBar/(rangeScrollView * 1.0f);
复制代码
 
 
到此我们就已经结束了scrollBar的绘制了
 
软件定制,博远电子,友情提醒。
 

TAG
软件定制,软件开发,瀚森HANSEN
0
该内容对我有帮助