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简单实现圆盘抽奖界面 的全部内容, 来源链接: utcz.com/z/334158.html

回到顶部