转盘抽奖案例

 之前项目里有用到,不多说。直接贴代码。

public class Circleview extends ImageView implements Runnable {

	private Bitmap mHourBitmap;
	
	private boolean bInitComplete = false;
	private boolean stopRoter = true;
	float Angel = 0.0f;
	Matrix matx = new Matrix();
	float maxAngel = 0.0f;
	int screnWidth = 0;
	
	public Circleview(Context context,int width) {
		super(context);
		this.screnWidth = width;
		init();
		new Thread(this).start();
	}

	public void init() {
		mHourBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.share_lottery_pointer);
		bInitComplete = true;
	
	}

	public void setRotate_degree(float degree) {
		Angel = degree;
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		super.onDraw(canvas);
		
		matx.reset();
		canvas.drawColor(Color.TRANSPARENT);
		
		if (!bInitComplete) {
			return;
		}
		Paint localPaint = new Paint();
		localPaint.setAntiAlias(true);
		localPaint.setFilterBitmap(true);
		matx.setTranslate(this.screnWidth/2-mHourBitmap.getWidth()/2, DensityUtil.dip2px(getContext(), 300)/2-mHourBitmap.getHeight()+DensityUtil.dip2px(getContext(), 20));
		matx.preRotate(Angel, mHourBitmap.getWidth() / 2,mHourBitmap.getHeight() * 4 / 5);
		
		canvas.drawBitmap(mHourBitmap, matx, localPaint);
	}
	
	public void run() {
		try {
			while (true) {
				if (!isStopRoter()) {
					if(maxAngel!=0&&Angel>=maxAngel){
						setStopRoter(true);
						maxAngel = 0.0f;
					}else{
						if (maxAngel-Angel<90) {
							setRotate_degree(Angel+=2);
						}else if (maxAngel-Angel<360) {
							setRotate_degree(Angel+=5);
						}else if(maxAngel-Angel<360*2){
							setRotate_degree(Angel+=10);
						else setRotate_degree(Angel+=25);
					}
				this.postInvalidate();			
				Thread.sleep(50);
				}
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	
	}
	public void setStopPlace(int place){
		getRoterByPlace(place);
	}
	void getRoterByPlace(int place){
		float roter = getRoteCenter(place);
		float currentRoter = getCurrentRoter();
		float difRoter = currentRoter - roter;
		maxAngel = Angel + 360*5 + 360-difRoter;
	}
	float getRoteCenter(int place){
		float roter = 0.0f;
		switch (place) {
			case 1:
				roter = 0;
				break;
			case 2:
				roter = 60/2 + 30;
				break;
			case 3:
				roter = 60/2 + 90;
				break;
			case 4:
				roter = 60/2 + 150;
				break;
			case 5:
				roter = 60/2 + 210;
				break;
			case 6:
				roter = 60/2 + 270;
				break;
			default:
				break;
		}
		return roter;
	}
	float getCurrentRoter(){
		int current = (int) Angel/360;
		if(0==current)
		return Angel;
		float roter = Angel - 360*current;
		return roter;
	}
	public boolean isStopRoter() {
		return stopRoter;
	}
	
	public void setStopRoter(boolean stopRoter) {
		this.stopRoter = stopRoter;
	}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值