不多说,先上个效果图
android 小米时钟的实现_第1张图片

这里写图片描述

代码也贴出来了:

package com.example.administrator.testmyidea.myView;import android.content.Context;import android.graphics.*;import android.util.AttributeSet;import android.view.View;import java.util.Timer;import java.util.TimerTask;public class xiaomiClock extends View {    private Paint textPaint,colokPaint,rPaint,paint;    private Path mTriangle;    private Timer mTimer;    private float agree=0;    Shader fshader,mshader;    PathEffect mEffect;    public xiaomiClock(Context context) {        super(context);    }    public xiaomiClock(Context context, AttributeSet attrs) {        super(context, attrs);        mEffect=new DashPathEffect(new float[]{4,6,},0);        mshader=new SweepGradient(500,500,Color.parseColor("#1d8a7d"),Color.WHITE);        fshader=new SweepGradient(500,500,Color.GREEN,Color.RED);        textPaint=new Paint();        textPaint.setStrokeWidth(16);        textPaint.setColor(Color.WHITE);        textPaint.setStrokeCap(Paint.Cap.ROUND);        textPaint.setAntiAlias(true);        colokPaint=new Paint();        colokPaint.setStrokeWidth(8);        colokPaint.setColor(Color.parseColor("#018172"));        colokPaint.setAntiAlias(true);        colokPaint.setStrokeCap(Paint.Cap.ROUND);        paint =new Paint();        paint.setAntiAlias(true);        rPaint = new Paint();        rPaint.setColor(Color.WHITE);        rPaint.setAntiAlias(true);        rPaint.setStyle(Paint.Style.STROKE);        mTriangle=new Path();        mTriangle.moveTo(791, 500);// 此点为多边形的起点        mTriangle.lineTo((float) (791-Math.sqrt(1200)), 525);        mTriangle.lineTo((float) (791-Math.sqrt(1200)), 475);        mTriangle.close();        setmTimer();        System.out.println("度数"+((float)6.0/10));    }    @Override    protected void onDraw(Canvas canvas) {        canvas.drawColor(Color.parseColor("#018172"));        //中心小圆        canvas.drawCircle(500,500,19,textPaint);        //外围白色圆圈        canvas.drawCircle(500,500,230,rPaint);//        //手表指针        colokPaint.setColor(Color.WHITE);        canvas.drawLine(500,500,500+getheith(200,100),600,colokPaint);        canvas.drawLine(500,500,500+getheith(140,70),400,colokPaint);        canvas.drawPoint(350,500+getheith(230,150),textPaint);        colokPaint.setColor(Color.parseColor("#018172"));//        //手表最中心绿色小圆        canvas.drawCircle(500,500,10,colokPaint);        //绘画手表盘        drawbeauty(canvas);    }    public void drawbeauty(Canvas canvas){        int canvasWidth = canvas.getWidth();        int canvasHeight = canvas.getHeight();        //设置缓存层,因为下面要实用xfermode,使用xfemode必须使用缓存层,否则会出现黑色背景        int layerId = canvas.saveLayer(0, 0, canvasWidth, canvasHeight, null, Canvas.ALL_SAVE_FLAG);        //初始化画笔,因为上下两层做画需要的画笔属性不一样,所以只能每次重新设置一次        //设置画笔为不填充模式        paint.setStyle(Paint.Style.STROKE);        //设置笔画样式,这里设置的是虚线样式        paint.setPathEffect(mEffect);        //设置笔画宽度        paint.setStrokeWidth(40);        //画一个纯色表盘,虚线,空心圆形        canvas.drawCircle(500,500,320,paint);        //设置画笔属性,SRC_IN属性,让第二个图案只能花在第一个图案上面,也就是只能画在上面所说那个纯色表盘里面        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));        //把画笔虚线属性去掉,因为我要的是一个实心圆形,然后让这个实心但是颜色不一样圆形画在上面所说表盘上面,        // 因为设置了xfermode,所以显示的一样会是虚线圆形表盘,但是颜色会变成你现在的颜色        paint.setPathEffect(null);        //设置画笔shader属性,这里设置的是SweepGradient模式,可以让颜色过渡泾渭分明,以圆形为中心开始变化        paint.setShader(mshader);        paint.setStyle(Paint.Style.FILL);        //保存画布        canvas.save();        //旋转画布,然后你就会发现时钟表盘开始动了        canvas.rotate(agree,500,500);        canvas.drawRect(100, 100, 900, 900, paint);        canvas.drawPath(mTriangle,textPaint);        canvas.restore();        //最后将画笔去除Xfermode        paint.setXfermode(null);        canvas.restoreToCount(layerId);    }    private void setmTimer(){        mTimer=new Timer();        mTimer.schedule(new TimerTask() {            @Override            public void run() {                agree=agree+((float)6.0/100);                if(agree>360)agree=0;                System.out.println("旋转"+agree);                postInvalidate();            }        },100,10);    }    private float getheith(int xie,int di){        return (float) Math.sqrt(Math.pow(xie,2)-Math.pow(di,2));    }}

更多相关文章

  1. Android Wear 进阶 5 - Creating Watch Faces 创建手表的界面(表
  2. Android利用shape画虚线
  3. android画一条虚线
  4. Android Wear 进阶 5 Creating Watch Faces 创建表盘
  5. android使用xml实现虚线效果
  6. 自定义控件--虚线
  7. Android:res之shape制作圆角、虚线、渐变
  8. 解决android中使用shape文件画虚线不显示
  9. android一款仪表盘控件

随机推荐

  1. Android访问本机ip
  2. 梦幻曲:Android系统启动
  3. 设置透明背景的Listview和选中状态
  4. relativelayout和spinner 详解
  5. 在Eclipse添加Android兼容包( v4、v7 app
  6. Android(安卓)RecyclerView拖拽与左右滑
  7. Android搜索TextView显示关键字标红(忽略
  8. H5页面调用android方法传json格式
  9. Android之Adapter用法总结
  10. android 修改标题栏文字居中