圆盘抽奖的界面简单实现

闲来无事,做了一个简单的抽奖转盘的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;
	}
}
时间: 2025-01-06 22:17:43

圆盘抽奖的界面简单实现的相关文章

qooxdoo入门教程一:应用程序界面简单设计

第1部分:从一个Tweets应用开始 简介 本教程将通过一系列比"Hello World"更深入的教程,从多个的实用角度来展示桌面qooxdoo应用的开发过程.你可以在qooxdoo下载包的framework中的DEMO目录中找到更多的示例程序,比如Feedreader等. 从教程的标题来看,我们创建一个简单的Tweets应用程序(Tweets是Identi.ca网站用来是阅读和发布的象twitter服务一样的公共短信息的应用程序). 下面的图片展示了应用程序完成后的样子. 你会看到这

大转盘抽奖css3+js(简单书写)

今天花了一段时间简单写了下抽奖大转盘,这里写的只是自己想到的简单的写了下(也希望收获其他想法),后续,再写的话会更新. 大体思路:页面加载完成后,通过监听开始按钮的点击事件.然后会根据产生的随机数,通过控制旋转针对象的transform属性,然后进行旋转,最后在结束后获取存储来数组中对应的抽奖内容最后弹出. 知识点:transform, translation,js数组,Math等等 先看下效果,没有素材,只是用css简单的布了下局.不要喷我比较简陋,嘿嘿. 接下来是基本代码结构: 1 <div

五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&amp;优雅:LayoutManager+ItemTouchHelper

转载请标明出处: http://blog.csdn.net/zxt0601/article/details/53730908 本文出自:[张旭童的博客](http://blog.csdn.net/zxt0601) 代码传送门:喜欢的话,随手点个star.多谢 https://github.com/mcxtzhang/LayoutManagerDemo 概述 前几天看有人实现了仿人人美剧的订阅界面,不过在细节之处以及实现方式我个人认为都不是最佳的姿势. 于是我也动手撸了一个,还顺带撸了个探探的界面

Java中使用AWT编写自己的第四个图形界面--简单的记事本

弄了个简单的记事本,能进行简单的打开文件,编辑文件,保存文件,但是怎么都无法解决中文乱码问题,求大家指教…… . package com.xywei.awt; import java.awt.FileDialog;import java.awt.Frame;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;import java.awt.TextArea;import java.awt.event.Acti

Django---管理界面简单设置

1.设置可选字段 为了设置某一个字段是可选的,不如说email,只需要修改其相关的模型,也就是在model.py中修改模型,将email=models.EmailField(blank=True),也就是添加blank=True. 这句代码告诉Django,允许email字段的输入为空,Django中字段的默认blank=false,即是不允许输入为空. note:django在生成sql语句的时候,会默认的在每一个字段的后面添加一个NOT NULL的约束,防止产生空字符串和NULL混淆的问题.

Web 登陆界面---简单模块1

今天学习登陆界面的基本模块,其中几个基本的元素 a元素.form元素.布局元素(table\tr\td).加粗(b).input元素 1.<a href="">内容</a> 其中href属性 表示的是页面地址,相当于一个超链接,点击该内容则跳转到这个页面地址. 2.<form action="" method="post"> 内容</form> form元素必有action method两个属性,其

GNOME界面简单使用

GNOME界面 CentOS下的文件夹打开方式,默认是打开一个文件夹就重新的打开一个窗口,并不是在原有的文件夹中显示要打开文件夹的内容. 怎么修改: 打开任意一个文件夹. Edit --> preference --> Behavior --> Always open in Browser Windows. 怎么打开命令行 Applications--> System Tools--> Terminal

jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现

在线实例 查看演示 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv

应用开始界面简单倒计时的dialog

activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="