软件编程
位置:首页>> 软件编程>> Android编程>> Android简单实现圆盘抽奖界面

Android简单实现圆盘抽奖界面

作者:andywuchuanlong  发布时间:2022-07-25 08:35:27 

标签:Android,抽奖

闲来无事,做了一个简单的抽奖转盘的ui实现,供大家参考

Android简单实现圆盘抽奖界面


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程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com