1.自定义控件 继承view类,重写方法
2.自定义画笔
3.写矩形,画圆弧
4.画里面的小圆
5.设置小圆上的文字
6.循环设置大圆上的文字
7.设置点击事件,写动画的方法
8.展示
第一步:
public class Pan extends View implements View.OnClickListener {
private Paint mPaint;
private Paint mp;
private Paint mp1;
private RectF rectF;
private int[] color={Color.YELLOW,Color.BLACK,Color.GREEN,Color.GRAY,Color.BLUE,Color.RED};
private String[] desc={"一等奖","二等奖","三等奖","四等奖","参与奖","谢谢参与"};
private RectF re;
private boolean isRote = false;
private RotateAnimation rotateAnimation;
public Pan(Context context) {
this(context,null);
}
public Pan(Context context,AttributeSet attrs) {
this(context, attrs,-1);
}
public Pan(Context context,AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//初始化画笔
initPaint();
this.setOnClickListener(this);
}
第二步:
private void initPaint() {
mPaint = new Paint();
mPaint.setStrokeWidth(5);
mPaint.setAntiAlias(true);
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL);
}
第三步:
//画一个圆
rectF = new RectF(120,120,500,500);
for (int i = 0; i < 6; i++) {
mPaint.setColor(color[i]);
canvas.drawArc(rectF,60*i,60,true,mPaint);
}
第四步:
//画一个小圆
canvas.drawCircle(320,320,90,mPaint);
第五步:
private void initXiao(Canvas canvas) {
mp = new Paint();
mp.setStrokeWidth(1);
mp.setAntiAlias(true);
mp.setTextSize(50);
mp.setColor(Color.WHITE);
mp.setStyle(Paint.Style.FILL);
canvas.drawText("start",270,330,mp);
}
第六步:
//设置大圆上的文字
re = new RectF(200,200,450,450);
for (int i = 0; i < 6; i++) {
mp1 = new Paint();
mp1.setStrokeWidth(1);
mp1.setAntiAlias(true);
mp1.setTextSize(30);
mp1.setColor(Color.WHITE);
mp1.setStyle(Paint.Style.FILL);
Path path = new Path();
path.addArc(re,60*i+15,60);
canvas.drawTextOnPath(desc[i],path,0,0,mp1);
}
第七步:
private boolean isRote = false;
@Override
public void onClick(View v) {
if(!isRote){
startAnimal();
}
}
private void startAnimal() {
isRote=true;
double random = Math.random();
rotateAnimation = new RotateAnimation(0, (float) (360*random),320,320);
rotateAnimation.setDuration(500);
rotateAnimation.setFillAfter(true);
rotateAnimation.setRepeatMode(Animation.RESTART);
rotateAnimation.setInterpolator(new LinearInterpolator());
rotateAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
isRote = false;
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
startAnimation(rotateAnimation);
}