Android简单实现圆盘抽奖界面_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程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
抽奖
抽奖圆盘、电脑圆盘抽奖软件免费、jquery圆盘抽奖特效、抽奖圆盘素材、圆盘抽奖特效,以便于您获取更多的相关知识。

时间: 2024-08-21 22:00:41

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

Webview实现android简单的浏览器实例代码_Android

WebView是Android中一个非常实用的组件,它和Safai.Chrome一样都是基于Webkit网页渲染引擎,可以通过加载HTML数据的方式便捷地展现软件的界面,下面通过本文给大家介绍Webview实现android简单的浏览器实例代码. 实现了浏览器的返回 前进 主页 退出 输入网址的功能 注释的很清楚啦 就不多说了 首先是布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

Android简单获取经纬度的方法_Android

本文实例讲述了Android简单获取经纬度的方法.分享给大家供大家参考,具体如下: public void getLoc() { // 位置 LocationManager locationManager; LocationListener locationListener; Location location; String contextService = Context.LOCATION_SERVICE; String provider; double lat; double lon; l

Android仿百度福袋红包界面_Android

首先来看一下效果图: 1.编程思路 看看界面,不难发现,其就是一个放入九张图片的容器,绘制其实可以在其上面另创建一个透明View负责绘制线与圆圈.下面我们将介绍一下实现过程. ㈠自定义ViewGroup 我们知道,自定义ViewGroup一定需要实现其onLayout()方法.该方法是设置子View位置与尺寸的时候调用.还有一个onMeasure()方法,该方法是测量view及其内容来确定view的宽度和高度. ㈡存储其点与圆的位置及绘制参数 当重回界面的时候,是不会保存上一次绘制界面的内容,必

Android自定义View制作仪表盘界面_Android

前言 最近我跟自定义View杠上了,甚至说有点上瘾到走火入魔了.身为菜鸟的我自然要查阅大量的资料,学习大神们的代码,这不,前两天正好在郭神在微信公众号里推送一片自定义控件的文章--一步步实现精美的钟表界面.正适合我这种菜鸟来学习,闲着没事,我就差不多依葫芦画瓢也写了一个自定义表盘View,现在纯粹最为笔记记录下来.先展示下效果图: 下面进入正题 自定义表盘属性 老规矩,先在attrs文件里添加表盘自定义属性 <declare-styleable name="WatchView"&

Android绘制炫酷引导界面_Android

一个超炫的引导界面,分享给大家 代码: MainActivity.java package com.bzu.gxs.webview1; import android.app.Activity; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; import android.view.Men

Android简单音乐播放实例_Android

Service翻译成中文是服务,熟悉Windows 系统的同学一定很熟悉了.Android里的Service跟Windows里的Service功能差不多,就是一个不可见的进程在后台执行. Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,例如我们打开一个音乐播放器来听音乐,在听音乐的同时也想做下其它的事情,比如上网聊Q.或者上网浏览新闻之类的事情.这样的话,我们就需要用到S

Android开发实例之登录界面的实现_Android

本文要演示的Android开发实例是如何完成一个Android中的miniTwitter登录界面,下面将分步骤讲解怎样实现图中的界面效果,让大家都能轻松的做出美观的登录界面.        miniTwitter登录界面效果图        先贴上最终要完成的效果图:        miniTwitter登录界面的布局分析        首先由界面图分析布局,基本可以分为三个部分,下面分别讲解每个部分.        第一部分是一个带渐变色背景的LinearLayout布局,关于背景渐变色就不再

Android简单创建一个Activity的方法_Android

本文实例讲述了Android简单创建一个Activity的方法.分享给大家供大家参考,具体如下: 1) 创建一个android项目 填写项目信息 2) 创建一个新Activity 右键点击Eclipse左边(默认)你要加入Activity的包,比如,我的包是com.INdroid.layout.然后选New->Class,输入类名后(注意首字母大写),在Superclass的Browse那里点击.最后在Choose a type那里输入Activity.然后点OK就可以了 3) 创建Activi

Android编程之简单启动画面实现方法_Android

本文实例讲述了Android简单启动画面实现方法.分享给大家供大家参考,具体如下: 每个Android应用程序启动之后都会出现一个Splash启动界面,显示产品LOGO.公司LOGO或者开发者信息.如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥的时间,提高用户体验. 1. splash.xml布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&q