转盘抽奖案例

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

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;
	}
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python转盘抽奖是一种利用Python编程语言来实现的抽奖系统。转盘抽奖是一种有趣的方式,通过转动转盘来随机抽取奖品或者奖励。 要实现Python转盘抽奖,我们首先需要使用相应的图形库来创建一个转盘的界面。可以使用Pygame或者Turtle等库来实现这个界面。然后,我们需要设计一些奖品或者奖励,可以根据需求来确定奖项的种类和数量。 在转盘抽奖中,每个奖项或者奖励通常都对应一个特定的角度,所以我们需要确定每个奖项所对应的角度。可以根据奖项的数量将360度平均分配给每个奖项,也可以根据需求进行自由分配。 一旦转盘的界面和奖项设置好了,我们需要编写代码来实现转盘的旋转和奖项的随机选取。可以使用Python的随机数生成器来随机选取一个角度作为中奖角度,然后通过旋转转盘到这个角度来确定奖项。 当用户点击开始按钮或者其他触发事件时,我们可以调用旋转函数来开始转盘的旋转。在旋转过程中,可以通过逐渐减速的方式来模拟真实的转盘旋转效果。当转盘停止旋转时,我们可以根据中奖角度来确定中奖奖项,并将结果展示给用户。 除了基本的转盘抽奖功能,我们还可以添加其他的功能,例如中奖概率调整、抽奖次数限制、中奖历史记录等。 总而言之,Python转盘抽奖是一种有趣的项目,通过使用Python编程语言和相应的图形库,我们可以实现一个可交互的转盘界面,让用户通过转动转盘来随机抽奖。这是一个可以很好地展示Python编程能力和创造力的项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值