android 自定义View模拟时钟

来源:互联网 发布:端口是什么意思 编辑:程序博客网 时间:2024/05/18 07:16

这里写图片描述

import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.RectF;import android.os.Handler;import android.os.Message;import com.gcssloop.view.CustomView;import java.util.Calendar;import java.util.Timer;import java.util.TimerTask;/** * Created by Administrator on 2017/9/11. */public class BiaoView extends CustomView {    Timer timer = new Timer();//定时器    public BiaoView(Context context) {        super(context);        timer.schedule(task, 1000, 1000);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        Calendar calendar = Calendar.getInstance();        int s = calendar.get(Calendar.HOUR);//时        int f = calendar.get(Calendar.MINUTE);//分        int m = calendar.get(Calendar.SECOND);//秒        System.out.println(s);        System.out.println(f);        System.out.println(m);        System.out.println("--------");        canvas.translate(mViewWidth / 2, mViewHeight / 2);//重设坐标中心        canvas.rotate(-90);        mDeafultPaint.setStrokeWidth(10);        mDeafultPaint.setColor(Color.BLUE);        canvas.drawCircle(0,0,450,mDeafultPaint);        mDeafultPaint.setColor(Color.BLACK);        canvas.drawCircle(0,400,20,mDeafultPaint);        canvas.drawCircle(0,-400,20,mDeafultPaint);        canvas.drawCircle(400,0,20,mDeafultPaint);        canvas.drawCircle(-400,0,20,mDeafultPaint);        RectF rect=new RectF(-400,-400,400,400);        float start=30f;        for (int i = 0; i < 12; i++) {            canvas.drawArc(rect,start*i-0.5f,1f,true,mDeafultPaint);        }        mDeafultPaint.setColor(Color.BLUE);        canvas.drawCircle(0,0,380,mDeafultPaint);        mDeafultPaint.setColor(Color.BLACK);        mDeafultPaint.setStrokeWidth(20);        canvas.rotate(s*30+(f/2));        canvas.drawLine(-50, 0, 250, 0, mDeafultPaint);        canvas.rotate(-s*30-(f/2));        mDeafultPaint.setColor(Color.BLACK);        mDeafultPaint.setStrokeWidth(10);        canvas.rotate(f*6);        canvas.drawLine(-60,0,300,0,mDeafultPaint);        canvas.rotate(-f*6);        mDeafultPaint.setColor(Color.RED);        mDeafultPaint.setStrokeWidth(5);        canvas.rotate(m*6);        canvas.drawCircle(0,0,20,mDeafultPaint);        canvas.drawLine(-80,0,400,0,mDeafultPaint);    }    TimerTask task = new TimerTask() {        @Override        public void run() {            handler.sendEmptyMessage(1);        }    };    Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            invalidate();        }    };}
import android.content.Context;import android.graphics.Paint;import android.text.TextPaint;import android.util.AttributeSet;import android.view.View;public class CustomView extends View {    /**     * the context of current view     */    protected Context mCurrentContext;    /**     * the width of current view.     */    protected int mViewWidth;    /**     * the height of current view.     */    protected int mViewHeight;    /**     * default Paint.     */    protected Paint mDeafultPaint = new Paint();    /**     * default TextPaint     */    protected TextPaint mDefaultTextPaint = new TextPaint();    public CustomView(Context context) {        this(context, null);    }    public CustomView(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        this.mCurrentContext = context;    }    @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {        super.onSizeChanged(w, h, oldw, oldh);        mViewWidth = w;        mViewHeight = h;    }}