android 自定义View模拟时钟

这里写图片描述

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;
    }


}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魑魅魍魉9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值