android自定义View之尺子

本文介绍了一种改进的时间设置方法,通过创建一个自定义的卡尺(尺子)View来提高用户体验。重点讲解了卡尺View的四个关键绘制部分:坐标轴、刻度、当前刻度指针以及滑动处理。提供了卡尺绘制基类及横向卡尺的具体实现,最终展示了实现效果。
摘要由CSDN通过智能技术生成

最近在做一个时间设置功能,之前都是简单的用一个EditText来实现,并设置输入范围或者输入错误的警告信息,这样的方法虽然简单,但用户使用起来,显得繁琐,而且还动不动的蹦出来俩提示,一点都不友好。
因此这次换个新的设计吧——卡尺选择。

主要介绍一下这个View的主要几个绘制点:
1. 坐标轴:需要绘制X轴(横向卡尺)或Y轴(纵向卡尺)drawLine(Canvas canvas, Paint paint);
2. 刻度:需要绘制坐标轴上的刻度。drawScale(Canvas canvas, Paint paint);绘制刻度时,需要的参数有坐标轴宽度以及刻度之间的间隔;
3. 当前刻度指针:drawScalePointer(Canvas canvas, Paint paint); 需要绘制在当前卡尺显示区域的中点。由于卡尺的这个指针每次卡尺滚动都需要重新绘制,所以每次都需要计算当前显示区域的中点位置,而这个中间位置是相对于卡尺起点位置的坐标;
4. 滑动卡尺支持scroll以及fling方式,且注意滑动的边界处理。

其他的就不多说了,直接上代码吧,代码中都有注释:
首先是卡尺绘制的基类,

package rkhy.com.ecg.view.scale;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.VelocityTracker;
import android.view.View;
import android.widget.Scroller;

import rkhy.com.ecg.R;

/**
 * **************************************************
 *
 * @ 日        期:2018/1/5 15:33
 * @ 作        者:shangming
 * 卡尺基类
 * **************************************************
 */
public abstract class BaseScaleView extends View {
   
    protected int mScaleMin; // 刻度最小值
    protected int mScaleMax; // 刻度最大值
    protected int mScaleHeight; // 刻度高度
    protected int mScaleNumHeight; // 整数刻度高度
    protected int mScaleSpace; // 刻度间隔

    protected int mScaleCount; //相对刻度起点滑动的刻度
    protected int mViewWidth; //宽度
    protected int mViewHeight; //高度
    protected int mScrollPreX;
    protected int mInitMiddleScalePointer; // 初始中间刻度指针
    protected int mScrollViewWidth; // 滚动的View宽度
    protected int mScaleMiddle; // 屏幕中间的刻度偏移量

    protected Scroller mScroller;
    protected OnScaleScrollListener mOnScaleScrollListener;
    protected VelocityTracker mVelocityTracker;

    public BaseScaleView(Context context) {
        super(context);
        init(context, null);
    }

    public BaseScaleView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    public BaseScaleView(Context context, @Nullable Attri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值