/** * date:2018/11/4 * author:王加辉(家辉辉辉) * function: 轮盘抽奖 */ public class Dial extends View implements View.OnClickListener{
private int x; private int y; private Paint mPaint; private String[] desc = new String[]{"性感", "丰满", "知性", "聪明", "贤惠", "优秀"}; private RotateAnimation mRotateAnimation;
public Dial(Context context) { this(context,null); }
public Dial(Context context, AttributeSet attrs) { this(context, attrs,0); }
public Dial(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //获取屏幕的宽高信息 DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); int widthPixels = displayMetrics.widthPixels; int heightPixels = displayMetrics.heightPixels;
//获取屏幕中心坐标 x = widthPixels / 2; y = heightPixels / 2;
//初始化画笔 initPaint();
//初始化旋转动画 initAnimation();
setOnClickListener(this);
}
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); }
private int colors[] = new int[] {Color.RED, Color.GRAY, Color.YELLOW, Color.BLUE, Color.GREEN, Color.DKGRAY, Color.WHITE} ;
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas);
//将绘制的图形移动到中心 canvas.translate(x,y); //绘制6个圆弧,rectF绘制背景图,整个盘块的范围 RectF rectF = new RectF(-300, -300, 300, 300); //度数,一个圆360°分6块一块60° float start = 60 ;
for(int i=0 ; i<6 ; i++){ mPaint.setColor(colors); canvas.drawArc(rectF,start * i,60,true,mPaint); }
//绘制中心的圆 mPaint.setColor(Color.GREEN); canvas.drawCircle(0,0,80,mPaint);
//写字体 mPaint.setColor(Color.WHITE); mPaint.setTextSize(25);
//获取文字宽度和高度,画矩形 Rect rect = new Rect(); //将TextView放到一个容器里面测量TextView宽和高 mPaint.getTextBounds("start",0,5,rect);
int width = rect.width(); int height = rect.height();
//将文字画到正中间 canvas.drawText("start",-width/2,height/2,mPaint);
//绘制描述信息 RectF rectF1 = new RectF(-200, -200, 200, 200); for(int i=0 ; i< 6 ; i++){ mPaint.setColor(Color.BLACK); //用来帮助绘制难度图形 Path path = new Path(); path.addArc(rectF1,start * i + 20 ,60); canvas.drawTextOnPath(desc,path,0,0,mPaint); }
}
private void initAnimation() { mRotateAnimation = new RotateAnimation(0, 360, x, y); mRotateAnimation.setDuration(1000); //就是,动画终止时停留在最后一帧~不然会回到没有执行之前的状态 mRotateAnimation.setFillAfter(true); //一直转 mRotateAnimation.setRepeatCount(-1); //不停顿 mRotateAnimation.setInterpolator(new LinearInterpolator()); /*设置一个动画效果执行的重复模式 RESTART:重新从头开始执行。 REVERSE:反方向执行。*/ mRotateAnimation.setRepeatMode(Animation.RESTART); }
//初始化画笔 private void initPaint() {
mPaint = new Paint(); //设置画笔样式 mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(20); //抗锯齿 mPaint.setAntiAlias(true);
}
private boolean isRote ;
//开始动画 private void startAnima(){ isRote = true ; startAnimation(mRotateAnimation); }
private void stopAnima(){ isRote =false ; clearAnimation(); }
@Override public void onClick(View v) { if(isRote){ stopAnima(); setRoundDom(); }else{ startAnima(); } }
//一个随机的结果 private void setRoundDom(){ double random = Math.random(); RotateAnimation rotateAnimation = new RotateAnimation(0, (float) (360 * random), x, y); rotateAnimation.setDuration(1000); //就是,动画终止时停留在最后一帧~不然会回到没有执行之前的状态 rotateAnimation.setFillAfter(true); startAnimation(rotateAnimation); } }
--------------------- 作者:家辉,喂 来源:CSDN 原文:blog.csdn.net/jiahui6666/… 版权声明:本文为博主原创文章,转载请附上博文链接! |
|