圆盘抽奖的界面简略实现

圆盘抽奖的界面简单实现

闲来无事,做了一个简单的抽奖转盘的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;//  等份
	@Override
	protected 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);
	}

	@Override
	public 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;

	@Override
	protected 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;
	}
}


1楼x359981514昨天 10:07
extends View......