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;// 等份
 @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;
 }
}

希望本文所述对大家学习Android程序设计有所帮助。

时间: 2016-01-06

Android中利用SurfaceView制作抽奖转盘的全流程攻略

一.概述 今天给大家带来SurfaceView的一个实战案例,话说自定义View也是各种写,一直没有写过SurfaceView,这个玩意是什么东西?什么时候用比较好呢? 可以看到SurfaceView也是继承了View,但是我们并不需要去实现它的draw方法来绘制自己,为什么呢? 因为它和View有一个很大的区别,View在UI线程去更新自己:而SurfaceView则在一个子线程中去更新自己:这也显示出了它的优势,当制作游戏等需要不断刷新View时,因为是在子线程,避免了对UI线程的阻塞. 知

Android实现抽奖转盘实例代码

本文详述了android抽奖程序的实现方法,程序为一个抽奖大转盘代码,里面定义了很多图形方法和动画. 实现主要功能的SlyderView.java源代码如下: import android.app.Activity; import android.content.Context; import android.graphics.BlurMaskFilter; import android.graphics.Canvas; import android.graphics.Color; import

Android打造流畅九宫格抽奖活动效果

因为company项目中需要做九宫格抽奖活动,以前都没有做过类似的功能,虽然之前在浏览大神们的博客中,无意中也看到了好多关于抽奖的项目,但因为项目中没有需要,一直都没有点击进去看.这次不去看估计不行.直到公司计划要做抽奖功能,才迫不得已上网查找demo 网上找了大半天,好不容易找到了几个demo,下载下来,解压缩包发现竟然里面空空如也,只有几张九宫格的图片,害我白白浪费了几个CSDN积分.后面在eoe网站那发现了一个demo,于是好开心,下载下来后马上导入到工程中,运行看了效果,九宫格是出来了,

js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS

绝对值得看的来篇,哈哈.本人亲自完成,有错误请大家指出: 现在的手机完美支持html5,所以如果手机端想要做个抽奖模块的话,用刮刮卡抽奖效果,相信这个互动体验是非常棒的 ​ps:由于本人没有wp8系统的手机,所以没法兼容wp8系统的,目前完美兼容android,IOS 如果要在pc浏览的话,得改下js,目前支持谷歌,火狐,ie>=10,如果网友想要的话我就去写个 代码如下: 复制代码 代码如下: <!DOCTYPE html> <html lang="en"&g

Android App中实现简单的刮刮卡抽奖效果的实例详解

主要思想: 将一个view设计成多层:背景层,含中奖信息等: 遮盖层,用于刮奖,使用关联一个Bitmap的Canvas 在该Bitmap上,使用它的canvas.drawPath的api来处理 手势滑动(类似刮奖的动作) 使用paint.setXfermode 来进行消除手势滑动区域 public class GuaView extends View { private Bitmap mBitmap; //遮盖的图层 private Canvas mCanvas; //绘制遮盖图层 privat

Android抽奖轮盘的制作方法

本文实例为大家分享了Android抽奖轮盘的具体代码,供大家参考,具体内容如下 main布局(图片资源请自行寻找,抱歉) <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gra

Android自定义View实现QQ运动积分转盘抽奖功能

因为偶尔关注QQ运动, 看到QQ运动的积分抽奖界面比较有意思,所以就尝试用自定义View实现了下,原本想通过开发者选项查看下界面的一些信息,后来发现积分抽奖界面是在WebView中展示的,应该是在H5页面中用js代码实现的,暂时不去管它了. 这里的自定义View针对的是继承自View的情况,你可以将Canvas想象为画板, Paint为画笔,自定义View的过程和在画板上用画笔作画其实类似,想象在画板上作画的过程,你要画一个多大图形(对应View的测量 onMeasure方法),你要画什么样的图

Android使用surfaceView自定义抽奖大转盘

使用surfaceView自定义抽奖大转盘 话不多说,先上效果图 完整代码地址欢迎start 实现思路以及过程 1.首先了解SurfaceView的基本用法,它跟一般的View不太一样,采用的双缓存机制,可以在子线程中绘制View,不会因为绘制耗时而失去流畅性,这也是选择使用SurfaceView去自定义这个抽奖大转盘的原因,毕竟绘制这个转盘的盘块,奖项的图片和文字以及转动都是靠绘制出来的,是一个比较耗时的绘制过程. 2.使用SurfaceView的一般模板样式 一般会用到的成员变量 priva

Android实现可点击的幸运大转盘

之前的项目有一个幸运大转盘的功能,在网上找了很久,都没有合适的方法. 这是效果图,实现目标:十二星座的图片可点击切换选中效果,根据选择不同的星座,实现不同的 方法.之前网上的都是带有指针的,或者可点击改变效果,但是并不知道选择的到底是哪个,即虚拟选择. 实现该功能的主要代码如下: 1.自定义一个布局,存放图片,实现圆形布局. /** * * * CircleMenuLayout.java * * @author wuxiaosu * */ public class CircleMenuLayou

js实现大转盘抽奖游戏实例

本文实例讲述了js实现大转盘抽奖游戏.分享给大家供大家参考.具体实现方法如下: <!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"> <hea

基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法

大转盘中奖概率算法在我们的日常生活中,经常遇到,那么基于php代码是如何实现中奖概率算法的,下面通过一段代码实例给大家介绍php中奖概率算法,代码简单易懂,并且附有注释,具体代码如下所示: <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内, * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间, * 在本例

php抽奖概率算法(刮刮卡,大转盘)

本文实例为大家分享了php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法,用法很简单,代码里有详细注释说明,供大家参考,具体内容如下 <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内, * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间, * 在本例当中就是减去100,也就是说第二个数是在1,900这个范围

jquery——九宫格大转盘抽奖实例

 一.用到的图片 二.代码如下,重点是js部分 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jQuery九宫格大转盘抽奖</title> <style> #lottery{width:570px;height:510

jquery实现九宫格大转盘抽奖

下面我们来分享一个九宫格抽奖特效 特效说明: 一款jQuery九宫格大转盘抽奖代码网页特效,点击抽奖按钮开始随机抽奖选择奖品,可设置起点位置.奖品数量.转动次数.中奖位置参数.(兼容测试:IE7及以上.Firefox.Chrome.Opera.Safari.360等主流浏览器) HTML: <!--效果html开始--> <div id="lottery"> <table border="0" cellpadding="0&q

Unity 2017使用UGUI实现大转盘抽奖

本文实例为大家分享了Unity 2017实现大转盘抽奖的具体代码,供大家参考,具体内容如下 涉及到的插件:Dotween 在"Hierarchy"面板创建一个Image,这个Image用来显示大转盘的那个圆盘,我用的UGUI里默认的那个圆圆的图片,放大后很模糊,不过不打紧 接着创建一个Panel名字改成"奖品组",这个是奖品的父物体,记得吧Panel里的Image,Canvas Renderer组件删了 然后在创建一个Panel名字改成"Awar"

大转盘抽奖小程序版 转盘抽奖网页版

今天整理了下以前写的小demo,把大转盘抽奖的代码,整合下,列了网页版和小程序两个版本,这个转盘抽奖的核心是H5的canvas和Css3的translate属性,非常简单,写了网页版和小程序版供大家参考,主要核心代码就是利用canvas画图,完整代码见大转盘抽奖,下载可用 希望给大家带来帮助 //转盘内部绘制 lottery.prototype.getCanvasI=function(){ let itemsArc=360/this.itemsNum //获取大转盘每等分的角度 this.ite

python实现大转盘抽奖效果

本文实例为大家分享了python实现大转盘抽奖的具体代码,供大家参考,具体内容如下 选择转盘中的某一个方框,来进行抽奖 import tkinter #导入线程模块 import threading import time #导入代码的sleep 代码休眠 root = tkinter.Tk() root.title('大转盘') root.minsize(300,300) #摆放按钮 btn1 = tkinter.Button(root,text = '樱桃',bg = 'red') btn1