import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.SweepGradient; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.View; /** * Created by glory on 2015/9/24. */ public class ScanningView extends View { private static final int MSG_RUN = 1; private Paint mCirclePaint; private Paint mArcPaint; private Paint mBgPain; private RectF mRectf; private int mSweep; public ScanningView(Context context, AttributeSet attrs) { super(context, attrs); mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mCirclePaint.setColor(Color.parseColor("#33ff00")); mCirclePaint.setStyle(Paint.Style.STROKE); mCirclePaint.setStrokeWidth(2.f); mArcPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mArcPaint.setColor(Color.GRAY); mArcPaint.setStyle(Paint.Style.FILL); mBgPain = new Paint(Paint.ANTI_ALIAS_FLAG); mBgPain.setColor(Color.parseColor("#00ff00")); mBgPain.setStyle(Paint.Style.FILL); mRectf = new RectF(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int size = getMeasuredWidth(); setMeasuredDimension(size, size); mRectf.set(0, 0, getMeasuredWidth(), getMeasuredHeight()); mArcPaint.setShader(new SweepGradient(size/2,size/2,Color.parseColor("#00ff00"),Color.parseColor("#006600"))); } @Override protected void onDraw(Canvas canvas) { int centerX = getMeasuredWidth()/2; int centerY = getMeasuredHeight()/2; canvas.save(); canvas.rotate(mSweep, centerX, centerY); canvas.drawArc(mRectf, 0, 360, true, mBgPain); canvas.drawArc(mRectf, 0, mSweep, true, mArcPaint); canvas.restore(); canvas.drawCircle(centerX, centerY, centerX / 3, mCirclePaint); canvas.drawCircle(centerX, centerY, (centerX *2)/ 3, mCirclePaint); canvas.drawCircle(centerX, centerY, centerX, mCirclePaint); } public void start(){ mHandler.removeMessages(MSG_RUN);//防止产生多次消息 mHandler.sendEmptyMessage(MSG_RUN); } private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { if(msg.what == MSG_RUN){ mSweep +=1; if(mSweep>360){ mSweep = 0;} postInvalidate(); sendEmptyMessage(MSG_RUN); } } }; }