Android簡單實現(xiàn)圓盤抽獎界面
更新時間:2016年01月08日 16:40:00 作者:andywuchuanlong
這篇文章主要介紹了Android簡單實現(xiàn)圓盤抽獎界面的相關資料,需要的朋友可以參考下
閑來無事,做了一個簡單的抽獎轉(zhuǎn)盤的ui實現(xiàn),供大家參考

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 TextView中識別多個url并分別點擊跳轉(zhuǎn)方法詳解
在本篇文章里小編給大家整理的是關于android TextView中識別多個url并分別點擊跳轉(zhuǎn)方法詳解,需要的朋友們可以學習參考下。2019-08-08
Android那兩個你碰不到但是很重要的類之ActivityThread
上篇文章我們聊了些Android里那些我們平時碰不到但很重要的類ViewRootImpl,這一篇我們就來看看另外那個類ActivityThread,文中有相關的代碼示例,感興趣的同學可以跟著小編一起來學習2023-05-05
Android項目仿UC瀏覽器和360手機衛(wèi)士消息常駐欄(通知欄)
本篇文章主要介紹了Android項目仿UC瀏覽器和360手機衛(wèi)士消息常駐欄(通知欄),可以仿照360的通知欄,有興趣的可以了解一下。2016-11-11
深入理解TextView實現(xiàn)Rich Text--在同一個TextView設置不同字體風格
本篇文章是對Android中在同一個TextView中設置不同的字體風格進行了詳細的分析介紹,需要的朋友參考下2013-05-05

