android米尺

android米尺

    最近在自己的项目中使用到了米尺,在这里记录下来,也分享给大家。

    要绘制米尺,那么必须知道米尺由哪些要素组成。米尺由数字和刻度线线组成。 刻度线又包含长中短3种线。刻度线与相邻刻度线之间存在的距离为最小单位。

    了解了米尺的要素,我们就可以开始在代码中定义米尺的属性了。

米尺的方向(垂直或水平)
    private int mOrientation = VERTICAL;
米尺的背景颜色(当然你也可以定义drawable)
    private int mBackgroundColor;
刻度线的长度:
    private float mShortLineLength; //短线长度
    private float mLongLineLength; //长线长度
    private float mMiddleLineLength; //中线成都
刻度线的颜色:
    private int mLineColor;  //刻度线颜色
刻度线的宽度:
    private float mLineWidth; //刻度线的宽度
相邻刻度线之间的距离
    private double space;  //刻度线的距离
数字的颜色:
    private int mTextColor;
数字字体大小:
    private float mTextSize;

    属性定义的差不多了,那我们还缺少什么呢?对,我们缺少对相邻刻度之间的大小的定义。如何才能确定这个大小呢?对,我们需要的是求出屏幕的物理大小和屏幕的分辨率。 如何才能获取到屏幕的物理长宽?直接看代码
    Point point = new Point();
    //屏幕实际分辨大小,包含通知栏
    getWindowManager().getDefaultDisplay().getRealSize(point);
    DisplayMetrics dm = getResources().getDisplayMetrics();
    //获取到的是英寸值*25.4
     float physicsW = (point.x/ dm.xdpi)*25.4;  //屏幕物理宽度
     float physicsH = (point.y / dm.ydpi)*25.4; //屏幕物理长度

    知道屏幕物理长度,屏幕的的实际分辨率。我们只需要知道自定义控件的大小,重载onMeasure。就知道space的大小了
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 


万事具备,只欠绘制onDraw
 
canvas.drawColor(mBackgroundColor); //绘制背景
switch (mOrientation) {
    case VERTICAL:
        drawVertical(canvas);
        break;
    case HORIZONTAL:
        drawHorizontal(canvas);
        break;
}


具体绘制,这里就不贴出来了。源码:https://github.com/zhao007z4/ruler

参考:https://blog.csdn.net/lincyang/article/details/42679589

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值