Welcome

首页 / 移动开发 / Android / Android简单实现圆盘抽奖界面

闲来无事,做了一个简单的抽奖转盘的ui实现,供大家参考


package com.microchange.lucky;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View;public class HalfCircle extends View { private Paint paint;private RectF oval;private float startAngle;private float sweepSpeed;private float sweepAngle;boolean useCenter;int count;// 等份@Overrideprotected void onDraw(Canvas canvas) { setSweepAngle(count); while (startAngle <= 360) {if (startAngle % (count*3) == 0) { paint.setColor(Color.BLUE);} else if (startAngle % (count*2) == 0){ paint.setColor(Color.GREEN);}else { paint.setColor(Color.RED);}Log.e(""+startAngle, paint.getColor()+"");canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint);startAngle += count; } float centerX = oval.centerX(); float centerY = oval.centerY(); paint.setColor(Color.WHITE); //paint.setStrokeWidth(5); //paint.setStyle(Paint.Style.STROKE); //设置空心 paint.setAntiAlias(true); //消除锯齿 canvas.drawCircle(centerX, centerY, 50, paint); String text = "奖"; paint.setTextSize(20 * getContext().getResources().getDisplayMetrics().density); float measureText = paint.measureText(text); float textY = paint.descent() - paint.ascent(); paint.setColor(Color.RED); //canvas.drawLine(0, centerY, 480, centerY, paint); //canvas.drawText(text, centerX-(measureText/2), centerY, paint); canvas.drawText(text, centerX-(measureText/2), centerY+(textY/4), paint);} private void init() { paint = new Paint(); paint.setColor(Color.BLUE); paint.setAntiAlias(true); paint.setStrokeWidth(5);} @Overridepublic boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event);}/** * @return the count */public int getCount() { return count;} /** * @param count the count to set */public void setCount(int count) { this.count = 360 / count;} public Paint getPaint() { return paint;} public void setPaint(Paint paint) { this.paint = paint;} public RectF getOval() { return oval;} public void setOval(RectF oval) { this.oval = oval;} public float getStartAngle() { return startAngle;} public void setStartAngle(float startAngle) { this.startAngle = startAngle;} public float getSweepSpeed() { return sweepSpeed;} public void setSweepSpeed(float sweepSpeed) { this.sweepSpeed = sweepSpeed;} public float getSweepAngle() { return sweepAngle;} public void setSweepAngle(float sweepAngle) { this.sweepAngle = sweepAngle;} public boolean isUseCenter() { return useCenter;} public void setUseCenter(boolean useCenter) { this.useCenter = useCenter;} public HalfCircle(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init();} public HalfCircle(Context context, AttributeSet attrs) { this(context, attrs, 0);} public HalfCircle(Context context) { this(context, null, 0);}} 
package com.microchange.lucky;import android.app.Activity; import android.graphics.RectF; import android.os.Bundle; import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; import android.view.animation.RotateAnimation;public class MainActivity extends Activity {RectF rect;int radius = 300; @Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); HalfCircle circle = new HalfCircle(getApplicationContext()); circle.setOval(getRectF()); //circle.setStartAngle(90); circle.setUseCenter(true); circle.setCount(9); Animation animation = new RotateAnimation(0, 135*10, getRectF().centerX(), getRectF().centerY()); animation.setDuration(5000); animation.setInterpolator(new DecelerateInterpolator()); //animation.setRepeatCount(-1); circle.setAnimation(animation ); //animation.start(); setContentView(circle);} public RectF getRectF(){ if (rect==null){ // getWindow().getDecorView().getWidth()int width = getResources().getDisplayMetrics().widthPixels;int height = getResources().getDisplayMetrics().heightPixels;int top = (height - radius)/2;int left = (width - radius)/2;rect = new RectF(left, top, left+radius, top+radius); } return rect;} } 
希望本文所述对大家学习Android程序设计有所帮助。