import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Handler;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;import java.util.Calendar;public class MyViewClock extends View {    private Paint mPaint;    private float textSize = 30;    private boolean start = true;//控制开关    private Handler handler;    public MyViewClock(Context context) {        this(context, null);    }    public MyViewClock(Context context, @Nullable AttributeSet attrs) {        this(context, attrs, 0);    }    public MyViewClock(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init();    }    private void init() {        mPaint = new Paint();        handler = new Handler();    }    private void initPaint() {        mPaint = new Paint();        mPaint.setColor(Color.BLACK);        mPaint.setStrokeWidth(10);        mPaint.setStyle(Paint.Style.STROKE);        mPaint.setAntiAlias(true);//去锯齿        mPaint.setTextSize(textSize);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }    @Override    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {        super.onLayout(changed, left, top, right, bottom);    }    @Override    protected void onDraw(final Canvas canvas) {        super.onDraw(canvas);        initPaint();        int width = getWidth() - getPaddingLeft() - getPaddingRight();        int height = getHeight() - getPaddingTop() - getPaddingBottom();        final int xPoint = getWidth() / 2;        final int yPoint = getHeight() / 2;        final int radius = Math.min(width / 2, height / 2);        //背景圆        canvas.drawCircle(xPoint, yPoint, radius, mPaint);        //中心        mPaint.setStyle(Paint.Style.FILL);        mPaint.setColor(Color.BLUE);        canvas.drawCircle(xPoint, yPoint, 10, mPaint);        //刻度和数字        mPaint.setColor(Color.BLACK);        for (int i = 1; i <= 60; i++) {            if (i % 5 == 0) {                mPaint.setStrokeWidth(10);                double[] p = getPointLocationOnCircle(new float[]{xPoint, yPoint}, radius, i, 60);                double[] p1 = getPointLocationOnCircle(new float[]{xPoint, yPoint}, radius - 30, i, 60);                canvas.drawLine((float) p[0], (float) p[1], (float) p1[0], (float) p1[1], mPaint);                double[] p2 = getPointLocationOnCircle(new float[]{xPoint, yPoint}, radius - 50, i, 60);                canvas.drawText(i / 5 + "", (float) p2[0] - textSize / 2, (float) p2[1] + textSize / 2, mPaint);            } else {                mPaint.setStrokeWidth(5);                double[] p = getPointLocationOnCircle(new float[]{xPoint, yPoint}, radius, i, 60);                double[] p1 = getPointLocationOnCircle(new float[]{xPoint, yPoint}, radius - 15, i, 60);                canvas.drawLine((float) p[0], (float) p[1], (float) p1[0], (float) p1[1], mPaint);            }        }        Calendar c = Calendar.getInstance();        int second = c.get(Calendar.SECOND);        int minute = c.get(Calendar.MINUTE);        int hour = c.get(Calendar.HOUR);        //秒钟        mPaint.setStrokeWidth(3);        double[] p = getPointLocationOnCircle(new float[]{xPoint, yPoint}, radius - 50, second, 60);        canvas.drawLine(xPoint, yPoint, (float) p[0], (float) p[1], mPaint);        //分钟        mPaint.setStrokeWidth(6);        double[] p1 = getPointLocationOnCircle(new float[]{xPoint, yPoint}, radius / 2, minute, 60);        canvas.drawLine(xPoint, yPoint, (float) p1[0], (float) p1[1], mPaint);        //时钟        mPaint.setStrokeWidth(9);        double[] p2 = getPointLocationOnCircle(new float[]{xPoint, yPoint}, radius / 4, hour, 12);        canvas.drawLine(xPoint, yPoint, (float) p2[0], (float) p2[1], mPaint);        if (start){            handler.postDelayed(new Runnable() {                @Override                public void run() {                    invalidate();                }            },1000);        }    }    /**     * 得到圆等分点的坐标     * @param centerOfCircle  圆心坐标     * @param radius  半径     * @param number  某等分     * @param total 总等分数     * @return 等分点的  横纵坐标     */    private double[] getPointLocationOnCircle(float[] centerOfCircle, float radius, int number, int total) {        double[] point = new double[2];        float x = centerOfCircle[0];        float y = centerOfCircle[1];        double locationX;        double locationY;        locationX = x + radius * Math.sin(2 * Math.PI / total * number);        locationY = y - radius * Math.cos(2 * Math.PI / total * number);        point[0] = locationX;        point[1] = locationY;        return point;    }}
 

更多相关文章

  1. 百度map api for Android~搜索服务
  2. Android(安卓)判断触摸点是否在某个view的区域,解决子view与paren
  3. 【Android】OpenGL_ES基本用法
  4. android应用程序中获取view的位置(2)
  5. activity实现滑动效果
  6. Android(安卓)OpenGL 文本显示 LabelMaker
  7. 暂时只会这种导航,实时显示自己的位置,,求其他更好的方法,或api
  8. 地图定位
  9. android SeekBar双滑块

随机推荐

  1. android RecyclerView响应点击事件
  2. Android面试系列文章2018之Kotlin语言面
  3. Android(安卓)SQLite 是否开启了 shared-
  4. SecureRandom漏洞解析
  5. Android高德地图开发(2)——地图显示+自定
  6. Android(安卓)中application 详解
  7. android实现session保持【以及web登陆保
  8. Android(安卓)studio 任意修改项目包名(含
  9. Android基础教程——数据存储之操作数据
  10. Android使用Fragment来实现ViewPager的功