Class类探索(一)

感觉阔别scdn已经很久了,一个是项目比较忙,一个是许多想写的东西不敢轻易下笔写,最近又看了一些书,就更没有时间了,前天动手画了个表,贴贴代码,尚未完成,后续更新。

/**
 * Created by Administrator 
 * draw a clock
 */

public class MyClock extends View {

    private Paint paintCircle;
    private Paint paintScale;
    private Paint paintPointerMinute;
    private Paint paintPointerHour;




    public MyClock(Context context) {
        super(context);
        init(context);
    }


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

    public MyClock(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    public MyClock(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);

        init(context);
    }

    /**
     * 外圆;圆心:屏幕中心;半径:屏幕宽的一半
     */
    private void init(Context context) {
        /*---------------------*/
        DisplayMetrics displayMetrics = new DisplayMetrics();
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        windowManager.getDefaultDisplay().getMetrics(displayMetrics);
        int screenWidth = displayMetrics.widthPixels;
        int screenHeight = displayMetrics.heightPixels;
        LogT.i("屏幕的宽高是:" + screenWidth + ";" + screenHeight);
         /*---------------------*/

        paintCircle = new Paint();
        paintCircle.setStyle(Paint.Style.STROKE);
        paintCircle.setAntiAlias(true);
        paintCircle.setStrokeWidth(5f);
        paintCircle.setColor(Color.RED);

        paintScale = new Paint();
        paintScale.setColor(Color.RED);
        paintScale.setAntiAlias(true);
        paintScale.setStrokeWidth(3f);

        paintPointerMinute = new Paint();
        paintPointerMinute.setAntiAlias(true);
        paintPointerMinute.setStrokeWidth(10f);
        paintPointerMinute.setColor(Color.BLACK);

        paintPointerHour = new Paint();
        paintPointerHour.setAntiAlias(true);
        paintPointerHour.setStrokeWidth(20f);
        paintPointerHour.setColor(Color.BLACK);

    }

    // TODO: 2017/6/27
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);


    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(getMeasuredWidth() / 2, getMeasuredHeight() / 2, getMeasuredWidth() / 2, paintCircle);
        //paint the scale
        drawScale(canvas);
        // paint the pointer
        drawPointer(canvas);


    }

    /**
     *  paint the pointer
     * @param canvas canvas
     */
    private void drawPointer(final Canvas canvas) {
        canvas.translate(getMeasuredWidth()/2,getMeasuredHeight()/2);
        canvas.drawLine(0,0,100,100,paintPointerHour);
        canvas.drawLine(0,0,100,200,paintPointerMinute);

        canvas.save();
    }

    /**
     *  paint the scale
     * @param canvas canvas
     */
    private void drawScale(Canvas canvas) {
        for (int i = 1;i<=12;i++) {
            //翻转画布
            canvas.rotate(30,getMeasuredWidth()/2,getMeasuredHeight()/2);
            if (i ==3||i == 6|| i ==9||i == 12) {
                paintScale.setStrokeWidth(5f);
                paintScale.setTextSize(30f);
                canvas.drawLine(getMeasuredWidth()/2,
                        (getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2,
                        getMeasuredWidth()/2,
                        (getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2+50,
                        paintScale);
                String s = String.valueOf(i);
                canvas.drawText(s,(getMeasuredWidth()-paintScale.measureText(s))/2,
                        (getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2+100,
                        paintScale);
            }else {
                paintScale.setStrokeWidth(3f);
                paintScale.setTextSize(20f);
                canvas.drawLine(getMeasuredWidth()/2,
                        (getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2,
                        getMeasuredWidth()/2,
                        (getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2+30,
                        paintScale);
                String s = String.valueOf(i);
                canvas.drawText(s,(getMeasuredWidth()-paintScale.measureText(s))/2,
                        (getMeasuredHeight()-Math.min(getMeasuredWidth(),getMeasuredHeight()))/2+80,
                        paintScale);
            }
        }
    }


}

你可能感兴趣的:(Class类探索(一))