第四十天 自定义View(时钟)---convas

来源:互联网 发布:如何使用遮瑕膏 知乎 编辑:程序博客网 时间:2024/06/04 18:48

Convas

activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity"><com.example.administrator.myview.view.MyView    android:layout_width="match_parent"    android:layout_height="match_parent" /></LinearLayout>

MyView

public class MyView extends View {    private Paint mPaintLine;    private Paint mPaintCircel;    private Paint mPaintText;    private int width;    private int height;    private Calendar calendar;    private Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what){                case 0x23:                    calendar=Calendar.getInstance();                    invalidate();                    handler.sendEmptyMessageDelayed(0x23, 1000);                break;            }        }    };    public MyView(Context context) {        super(context);    }    public MyView(Context context, AttributeSet attrs) {        super(context, attrs);        mPaintLine=new Paint();        mPaintLine.setColor(Color.BLUE);//设置颜色        mPaintLine.setStrokeWidth(10);//设置线条宽度        mPaintLine.setAntiAlias(true);//线条是否是齿状        mPaintCircel=new Paint();        mPaintCircel.setColor(Color.BLUE);        mPaintCircel.setStrokeWidth(10);        mPaintCircel.setStyle(Paint.Style.STROKE);//设置为空心        //mPaintCircel.setStyle(Paint.Style.FILL);//设置为实心,默认为实心        mPaintText=new Paint();        mPaintText.setColor(Color.BLACK);        mPaintText.setTextSize(30);        mPaintText.setTextAlign(Paint.Align.CENTER);//文本居中        calendar=Calendar.getInstance();        handler.sendEmptyMessage(0x23);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        width=getDefaultSize(getSuggestedMinimumWidth(),widthMeasureSpec);        height=getDefaultSize(getSuggestedMinimumHeight(),widthMeasureSpec);        setMeasuredDimension(width,height);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.drawCircle(width/2,height/2,300,mPaintCircel);//圆心位置(x,y),半径        canvas.drawCircle(width/2,height/2,5,mPaintCircel);        for(int i=1;i<=12;i++){            canvas.rotate(30,width/2,height/2);            canvas.drawLine(width/2,height/2-300,width/2,height/2-280,mPaintLine);//(height/2-300,height/2-280)为时钟标志线条长度,即20            canvas.drawText(""+i,width/2,height/2-250,mPaintText);//数字位于线条下方        }        //设置分针        int minute=calendar.get(Calendar.MINUTE);        float minuteDegree=minute/60f*360;        canvas.save();        canvas.rotate(minuteDegree,width/2,height/2);        canvas.drawLine(width/2,height/2-200,width/2,height/2+20,mPaintLine);        canvas.restore();        //设置时针        int hour=calendar.get(Calendar.HOUR);        float houeDegree=(hour*60+minute)/12f/60*360;        canvas.save();        canvas.rotate(houeDegree,width/2,height/2);        canvas.drawLine(width/2,height/2-150,width/2,height/2+20,mPaintLine);        canvas.restore();        //设置秒针        int second=calendar.get(Calendar.SECOND);        float secondDegree=second*6;        canvas.save();        canvas.rotate(secondDegree,width/2,height/2);        canvas.drawLine(width/2,height/2-220,width/2,height/2+20,mPaintLine);        canvas.restore();    }}

MainActivity

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}

这里写图片描述

0 0
原创粉丝点击