安卓自定义View画钟实现转动

1.自定义View画钟实现转动
这个和画圆差不多,不过只是价格分针,并实现其转动,要加一个线程。代码如下:
Java类中的代码

package com.example.ll.canvas;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Message;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import java.util.logging.Handler;

/**
 * Created by ll on 2018/3/30.
 */

public class CircleView extends View {
    private Paint paint = new Paint();
    private int sec;

    //主线程更新Ui(os下的Handler)
    private android.os.Handler handler = new android.os.Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //重新调用onDraw方法
            invalidate();
        }
    };

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

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //大圆的颜色是蓝色
        paint.setColor(Color.BLUE);
        //设置抗锯齿
        paint.setAntiAlias(true);
        //圆不是填充的,是描边
        paint.setStyle(Paint.Style.STROKE);
//        //画笔边的宽度
//        paint.setStrokeWidth(10);

        //大圆与小圆的画出
        canvas.drawCircle(getWidth() / 2, getHeight() / 2, getHeight() / 4, paint);
        canvas.drawCircle(getWidth() / 2, getHeight() / 2, getHeight() / 80, paint);
        //利用循环将1到12的数字填写到表上
        for (int i = 1; i <= 12; i++) {
            //保存画布
            canvas.save();
            //旋转角度,旋转中心的设置
            canvas.rotate(360 / 12 * i, getWidth() / 2, getHeight() / 2);
            //数字大小的设置
            paint.setTextSize(40);
            //旋转的设置
            canvas.drawText(String.valueOf(i), getWidth() / 2 - 15, getHeight() / 2 - getHeight() / 4 + 60, paint);
            //刻度表(横线)的描写。参数意思:开始的X坐标,结束的X坐标,开始的Y坐标,结束的Y坐标,画笔(paint)
            canvas.drawLine(getWidth() / 2, getHeight() / 2 - getHeight() / 4, getWidth() / 2, getHeight() / 2 - getHeight() / 4 + 30, paint);
            //恢复原样
            canvas.restore();
        }
        //保存画布
        canvas.save();
        //旋转角度,旋转中心的设置
        canvas.rotate(6 * sec, getWidth() / 2, getHeight() / 2);
        //子针设置
        canvas.drawLine(getWidth() / 2, getHeight() / 2, getWidth() / 2, getHeight() / 2 - getHeight() / 4 + 100, paint);
        //恢复原样
        canvas.restore();
    }

    //点击事件(点一下,子针开始转)
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        new Thread(new Runnable() {
            @Override
            //子线程做读秒的耗时操作
            public void run() {
                //让子针不止转一次
                while (true) {
                    //子针角度转变次数进行自加
                    sec++;
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //子线程发出消息让主线程捕获消息
                    handler.sendEmptyMessage(sec);
                }
            }
        }).start();
        return super.onTouchEvent(event);
    }
}

xml中的代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.ll.canvas.CircleActivity">

    <com.example.ll.canvas.CircleView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</android.support.constraint.ConstraintLayout>

效果图如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值