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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章