自定义View重写构造方法和onDraw方法
MyView.java
package com.example.jrtt;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import java.util.Random;public class MyView extends View {private MyThread myThread;private Paint paint;private RectF rectF=new RectF(150,150,380,380);private int sweepAngle=0;private int sweepAngleAdd=20;private Random random=new Random();private boolean running=true;public MyView(Context context){this(context,null);}public MyView(Context context, AttributeSet attrs){super(context,attrs);//super关键字调用父类构造方法init(context,attrs);}private void init(Context context,AttributeSet attrs){paint=new Paint();paint.setTextSize(60);}@Overrideprotected void onDraw(Canvas canvas){Log.i("MyView","onDraw");if(null==myThread){myThread=new MyThread();myThread.start();}else{canvas.drawArc(rectF,0,sweepAngle,true,paint);}}private class MyThread extends Thread{@Overridepublic void run(){while(running){logic();postInvalidate();try{Thread.sleep(200);}catch(InterruptedException e){e.printStackTrace();}}}}protected void logic(){sweepAngle+=sweepAngleAdd;int r=random.nextInt(255);int g=random.nextInt(255);int b=random.nextInt(255);paint.setARGB(255,r,g,b);if(sweepAngle>=360){sweepAngle=0;}}@Overrideprotected void onDetachedFromWindow(){running=false;super.onDetachedFromWindow();}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">
<com.ansen.view.MyView android:background="@android:color/holo_green_dark"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</RelativeLayout>