a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > Android > 正文

Android實現抽獎轉盤實例代碼

2020-04-11 11:47:20
字體:
來源:轉載
供稿:網友

本文詳述了android抽獎程序的實現方法,程序為一個抽獎大轉盤代碼,里面定義了很多圖形方法和動畫。

實現主要功能的SlyderView.java源代碼如下:

import android.app.Activity;import android.content.Context;import android.graphics.BlurMaskFilter;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.ColorMatrixColorFilter;import android.graphics.EmbossMaskFilter;import android.graphics.MaskFilter;import android.graphics.Paint;import android.graphics.PorterDuffXfermode;import android.graphics.Paint.Style;import android.graphics.PorterDuff.Mode;import android.graphics.Path;import android.graphics.RadialGradient;import android.graphics.RectF;import android.graphics.Shader.TileMode;import android.util.AttributeSet;import android.util.TypedValue;import android.view.View;public class SlyderView extends View{  public SlyderView(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    init(context);  }  public SlyderView(Context context, AttributeSet attrs) {    super(context, attrs);    init(context);  }  public SlyderView(Context context) {    super(context);    init(context);  }  /**   * 屏幕寬度   */  private int screenW;  /**   * 屏幕的高度   */  private int screenH;  /**   * 分割的度數   */  private int [] drgrees = {20,50,40,90,70,40,50};  /***   * 分割的文字   */  private String [] strs = {"level1","level2","level3","level4","level5","level6","level7"};  /**   * 分割的顏色   */  private int [] colos = new int[] { 0xfed9c960, 0xfe57c8c8, 0xfe9fe558, 0xfef6b000, 0xfef46212, 0xfecf2911, 0xfe9d3011 };  /**   * 畫筆   */  private Paint paint;  /**   * 文字的大小   */  private float textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 15, getResources().getDisplayMetrics());  /**   * 文字的顏色   */  private int textcolor = Color.WHITE;  /**   * 園的半徑   */  private float radius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 100, getResources().getDisplayMetrics());  /**   * 畫文字的距離   */  private float textdis = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 80, getResources().getDisplayMetrics());  /**   * 畫箭頭的大小   */  private float roketSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 10, getResources().getDisplayMetrics());  private float initDegress = 0;  /**   * 圓心   */  private float centerX;  /**   * 圓心   */  private float centerY;  /**   * 立體邊緣   */  private MaskFilter filter = new EmbossMaskFilter(new float[] { 1, 1, 1 },0.4f, 6, 3.5f);  private MaskFilter outerFilter = new BlurMaskFilter(10, BlurMaskFilter.Blur.OUTER);  private MaskFilter innerFilter = new BlurMaskFilter(10, BlurMaskFilter.Blur.INNER);  @SuppressWarnings("deprecation")  private void init(Context context){    paint = new Paint();    paint.setAntiAlias(true);    paint.setStyle(Style.FILL);    paint.setColor(Color.WHITE);    screenW = ((Activity)context).getWindowManager().getDefaultDisplay().getWidth();    screenH = ((Activity)context).getWindowManager().getDefaultDisplay().getHeight();    int[] colores = new int[3];    colores[0] = Color.rgb(0xfF, 0x99, 0x00);    colores[1] = Color.rgb(0xff, 0xff, 0x00);    colores[2] = Color.rgb(0xff, 0x99, 0x00);    float[] positions = new float[3];    positions[0] = 0.0f;    positions[1] = 0.5f;    positions[2] = 1.0f;    gradient = new RadialGradient(centerX, centerY, radius/5, colores, positions, TileMode.CLAMP);  }  /**   * 繪制三角箭頭   */  private Path path = new Path();  /**   * 繪制矩形框   */  private RectF oval;  /**   * 外圓內陰影矩陣   */  private ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(new float[]{      1,0,0,0,0,      0,1,0,0,0,      0,0,1,0,0,      0,0,0,-1,255  });  @Override  protected void onDraw(Canvas canvas) {    super.onDraw(canvas);    centerX = screenW/2;    centerY = screenH/2;    oval = new RectF(centerX-radius,centerY-radius,centerX+radius,centerY+radius);    float start = 0;    paint.setColor(Color.rgb(0xdd, 0xdd, 0xdd));    paint.setAlpha(127);    canvas.drawCircle(centerX, centerY, radius+10, paint);    paint.setAlpha(255);    //畫扇形    paint.setAntiAlias(true);    for(int i=0;i<drgrees.length;i++){      float sweepAngle = drgrees[i];      float startAngle = start;      paint.setColor(colos[i%colos.length]);      canvas.drawArc(oval, startAngle, sweepAngle, true, paint);      start += drgrees[i];    }    //畫文字    paint.setColor(textcolor);    paint.setAntiAlias(true);    paint.setTextSize(textSize);    paint.setTextAlign(Paint.Align.RIGHT);    start = 0;    for(int i=0;i<drgrees.length;i++){      canvas.save();      canvas.rotate(start+drgrees[i]/2, centerX, centerY);      canvas.drawText(strs[i], centerX+textdis, centerY, paint);      canvas.restore();      start += drgrees[i];    }    int saveCount = canvas.save();    //畫外層立體效果    paint.setColorFilter(colorFilter);    canvas.saveLayer(oval,paint,Canvas.ALL_SAVE_FLAG);    paint.setColorFilter(null);    canvas.drawARGB(255, 0, 0, 0);    paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));    canvas.drawCircle(centerX, centerY, radius, paint);    paint.setXfermode(null);    paint.setMaskFilter(innerFilter);    paint.setColor(Color.argb(0xff, 0, 0, 0));    canvas.drawCircle(centerX, centerY, radius, paint);    paint.setMaskFilter(null);    canvas.restoreToCount(saveCount);    //畫內圓和內園效果    canvas.save();    paint.setColor(Color.argb(0xff, 0, 0, 0));    paint.setAntiAlias(true);    paint.setMaskFilter(outerFilter);    canvas.rotate(initDegress, centerX, centerY);    canvas.drawCircle(centerX, centerY, radius/3, paint);    paint.setMaskFilter(null);    paint.setColor(Color.WHITE);    canvas.drawCircle(centerX, centerY, radius/3, paint);    //畫三角型疊加當箭頭    path.moveTo(centerX-radius/3, centerY);    path.lineTo(centerX, centerY-radius/3-roketSize);    path.lineTo(centerX+radius/3, centerY);    path.close();    canvas.drawPath(path, paint);    canvas.restore();    paint.setMaskFilter(filter);    paint.setColor(Color.GREEN);    paint.setShader(gradient);    canvas.drawCircle(centerX, centerY, radius/5, paint);    paint.setMaskFilter(null);    paint.setShader(null);    //重繪調整三角的指向達到滾動的效果,現實項目中可不能這樣用的,效率太低下了,拆分View用動畫完成滾動才是王道    if(isRunning){      if(initDegress>=360){        initDegress = 0;      }      initDegress +=4;      invalidate();    }    if(isStoping){      if(initDegress<=360){        initDegress+=4;        invalidate();      }else{        if(initDegress-360<stop_degress){          initDegress+=2;          invalidate();        }      }    }  }  private boolean isRunning = false;  private boolean isStoping = false;  private int stop_degress =90;  /**   * 漸變   */  private RadialGradient gradient;  public void play(){    isRunning = true;    invalidate();  }  public void stop(int count){    for(int i =0;i<=count;i++){      if(i == count){        stop_degress +=drgrees[i]/2;      }else{        stop_degress +=drgrees[i];      }    }    isStoping = true;    isRunning = false;    invalidate();  }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩精品久久 | 伊人网站 | 曰韩精品一区二区 | 精品一区二区av | 婷婷中文字幕 | 国产精一区二区 | 九九热这里只有 | 日本精品一区二区 | 久久激情视频 | 好硬好涨老师受不了了视频 | 午夜av不卡 | 一本色道久久综合亚洲精品高清 | h黄动漫日本www免费视频网站 | 一级特黄网站 | 欧美一级片在线观看 | 奇米色777欧美一区二区 | 欧美日韩一区二区在线 | 蜜臀久久99精品久久久久久宅男 | 国产传媒自拍 | 久久99精品久久久久久园产越南 | 久久精品国产亚洲a∨蜜臀 性视频网站免费 | 国产精品极品美女在线观看免费 | 干网观看在线 | 精品无码久久久久国产 | 久久精品 | 一级高清视频 | 制服 丝袜 激情 欧洲 亚洲 | 国产精品久久久久久亚洲毛片 | av在线免费播放 | 成年人网站在线免费看 | 开心春色激情网 | 久久久久久久 | 99久久精品免费看国产免费粉嫩 | 国产美女久久久 | 成人av在线网 | 亚洲国产精品久久 | 日韩一区二区三区四区五区 | 日本99精品 | 一级日韩电影 | 久久国产精品免费一区二区三区 | 黄色一级大片在线免费看产 |