zoukankan      html  css  js  c++  java
  • 绘制一个简单的实现接口盘

    闲来无事,做一个简单的抽奖转盘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;
    	}
    }
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载(联系信息:QQ312037487 邮箱:andywuchuanlong@sina.cn)。

  • 相关阅读:
    Unity3d Android SDK接入
    Unity打包IOS和Android以及之间的交互
    Gradle
    General error: 1205 Lock wait timeout exceeded; try restarting transaction的解决办法
    kubeadm init [ERROR ImagePull]: failed to pull image [k8s.gcr.io/kube-apiserver-amd64:v1.11.3]: exit status 1
    yum安装kubectl时报错
    PhpStorm激活码 2020年3月亲测可用
    Vmware 14 安装 Vmware Tools 并配置宿主机共享文件给Vmware中Centos7系统
    期权
    对冲-风险对冲
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4723950.html
Copyright © 2011-2022 走看看