Android简单实现圆盘抽奖界面

 更新时间:2016年01月08日 16:40:00   作者:andywuchuanlong  
这篇文章主要介绍了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 AndFix热修复原理详情

    Android AndFix热修复原理详情

    这篇文章主要介绍了Android AndFix热修复原理详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值吗,需要的小伙伴可以参考一下
    2022-08-08
  • Golang+Android基于HttpURLConnection实现的文件上传功能示例

    Golang+Android基于HttpURLConnection实现的文件上传功能示例

    这篇文章主要介绍了Golang+Android基于HttpURLConnection实现的文件上传功能,结合具体实例形式分析了Android基于HttpURLConnection的客户端结合Go语言服务器端实现文件上传功能的操作技巧,需要的朋友可以参考下
    2017-03-03
  • Android进度条ProgressBar的实现代码

    Android进度条ProgressBar的实现代码

    这篇文章主要为大家详细介绍了Android进度条ProgressBar的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • Flutter实现渐变弧形进度条的示例详解

    Flutter实现渐变弧形进度条的示例详解

    在Flutter开发中,构建一个具有视觉吸引力的、反映进度的圆形弧形进度条是一个常见需求,本文将详细介绍如何使用Flutter和Dart语言实现这一功能,需要的可以参考下
    2023-12-12
  • Android实现文件的保存与读取功能示例

    Android实现文件的保存与读取功能示例

    这篇文章主要介绍了Android实现文件的保存与读取功能,涉及Android中文件操作函数getFileDir()和getCacheDir()的相关使用技巧,需要的朋友可以参考下
    2016-08-08
  • Android Menu详解及示例代码

    Android Menu详解及示例代码

    本文主要介绍Android Menu,这里对Android菜单(menu)进行了详细的介绍,并给出示例代码和实现效果图,有需要的小伙伴可以参考下
    2016-08-08
  • Android自定义TextView实现文字图片居中显示的方法

    Android自定义TextView实现文字图片居中显示的方法

    下面小编就为大家分享一篇Android自定义TextView实现文字图片居中显示的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • AsyncTask官方文档教程整理

    AsyncTask官方文档教程整理

    这篇文章主要跟大家分享了关于AsyncTask官方文档的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-04-04
  • Android编程动态按钮实现方法

    Android编程动态按钮实现方法

    这篇文章主要介绍了Android编程动态按钮实现方法,分享了onTouch方法及xml调用两种实现技巧,需要的朋友可以参考下
    2016-10-10
  • 超详细的Android开发调试工具ADB命令及安装介绍

    超详细的Android开发调试工具ADB命令及安装介绍

    这篇文章主要介绍了Android调试工具ADB安装使用技巧,非常详细,有需要的朋友可以借鉴参考下,希望可以有所帮助,祝大家早日升值加薪
    2021-09-09

最新评论