亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

安卓原生抽獎轉盤

2019-11-09 17:23:17
字體:
來源:轉載
供稿:網友

公司要做一個簽到抽獎的功能,本來想用H5寫的,但是可能會加載有點慢,最主要的是JS寫的canvas繪制渲染感覺不是很好,改成原生的吧,后期還可再優化

先來張效果圖: 這里寫圖片描述

實現功能: 1、自定義獎品個數 2、可控制抽中的選項

定義了一個MyCanvas類,來實現轉盤功能

import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.RectF;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.view.View;import java.util.ArrayList;import java.util.List;/** * Created by GLX on 2016/12/17. */public class MyCanvas extends View implements Runnable { PRivate List<String> jiangpinList = new ArrayList<>(); /** * 平分的個數 */ private int num; /** * 圓環是否繪制完畢 */ private boolean isOK = false; private Context context; public MyCanvas(Context context) { super(context); init(context); } public MyCanvas(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public MyCanvas(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, widthMeasureSpec); } private Paint p1; private Paint p2; private Paint ptex; private Canvas Mycanvas; /** * 是否開始旋轉 */ private boolean isStart = false; private Thread thread; /** * 每次繪制間隔時間 */ private int stopTime = 40; /** * 畫布需要旋轉的角度 */ private int jiaodu = 0; /** * 畫布每旋轉一次增加的角度 */ private int everyJiaodu = 15; private int everyAddJiaodu = everyJiaodu; private Matrix matrix; private Handler mHandler; private void init(Context context) { this.context = context; newThread(); this.mHandler = new Handler(context.getMainLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); //抽獎完成回調接口 wanCheng.isOK(); } }; p1 = new Paint(); p2 = new Paint(); ptex = new Paint(); p1.setColor(0xFFFFF4D6);// 鵝黃 p2.setColor(Color.WHITE);// 設置白色 ptex.setColor(0xFFE62D2D); ptex.setTextSize(20); ptex.setTextAlign(Paint.Align.CENTER); p1.setAntiAlias(true); p2.setAntiAlias(true); ptex.setAntiAlias(true); matrix = new Matrix(); String[] tt = {"0.1元", "1.8元", "0.3元", "3.6元", "0.5元", "5元", "0.8元", "再接再厲"}; for (int i = 0; i < tt.length; i++) { jiangpinList.add(tt[i]); } num = jiangpinList.size(); JiSuan(); } private float DanJiaoDu; private List<YuanHuClass> yuanHuClassList = new ArrayList<>(); boolean isshuang = true; private void JiSuan() { DanJiaoDu = (float) 360 / (float) num; yuanHuClassList.clear(); for (int i = 0; i < num; i++) { float startJiaodu = (float) i * DanJiaoDu; float stopJiaodu = (float) (i + 1) * DanJiaoDu; yuanHuClassList.add(new YuanHuClass(jiangpinList.get(i), startJiaodu, stopJiaodu, 90 + startJiaodu + DanJiaoDu / (float) 2)); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (Mycanvas == null) { Mycanvas = canvas; }// canvas.drawColor(0x00E62D2D); // 畫弧,第一個參數是RectF:該類是第二個參數是角度的開始,第三個參數是多少度,第四個參數是真的時候畫扇形,是假的時候畫弧線 for (int i = 0; i < num; i++) { YuanHuClass yuanHuClass = yuanHuClassList.get(i); float Viewstart = yuanHuClass.getStartJiaoDu(); float Viewstop = yuanHuClass.getStopJiaoDu(); RectF oval2 = new RectF(0, 0, getWidth(), getHeight());// 設置個新的長方形,掃描測量 //繪制扇形 if (isshuang) { canvas.drawArc(oval2, Viewstart, DanJiaoDu, true, p1); } else { canvas.drawArc(oval2, Viewstart, DanJiaoDu, true, p2); } isshuang = !isshuang; canvas.save(); float texJiaoDu = 90 + Viewstart + DanJiaoDu / 2; canvas.rotate(texJiaoDu, getWidth() / 2, getHeight() / 2); //繪制文字 canvas.drawText(yuanHuClass.getTitle(), getWidth() / 2, 50, ptex); canvas.restore(); if (isStart) { yuanHuClass.setStartJiaoDu((Viewstart + everyAddJiaodu) % 360); yuanHuClass.setStopJiaoDu((Viewstop + everyAddJiaodu) % 360); } } if (isStart) { canvas.rotate(jiaodu, getWidth() / 2, getHeight() / 2); } } @Override public void run() { while (isStart) { JianSu(); long startTime = System.currentTimeMillis(); jiaodu += everyAddJiaodu; if (jiaodu % 360 == 0) { jiaodu = 0; } doActionHandler.sendMessage(new Message()); long endTime = System.currentTimeMillis(); if (endTime - startTime < stopTime) { try { Thread.sleep(stopTime - endTime + startTime); } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * 已經經過的時間 */ private int allTime = 0; private int nnn = 0; /** * 旋轉減速 */ private void JianSu() { allTime += everyAddJiaodu; if (allTime > 500) { if (everyAddJiaodu == 1) { if (StopJiaoDu + 1 >= jiaodu % 360 && StopJiaoDu - 1 <= jiaodu % 360) { everyAddJiaodu = 0; } } if (nnn % 30 == 0 && everyAddJiaodu > 1) { if (everyAddJiaodu <= 4 && jiaodu + 16 >= StopJiaoDu) { if (everyAddJiaodu != 1) { everyAddJiaodu -= 1; } } else { everyAddJiaodu -= 2; } if (everyAddJiaodu < 0) { everyAddJiaodu = 1; } nnn = 0; } nnn++; if (everyAddJiaodu <= 0) { setStop(); } } } private Handler doActionHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); invalidate(); } }; /** * 停止時的角度 */ private float StopJiaoDu = 0; /** * 設置停止的選項 * * @param item */ public void setItem(int item) { if (item > jiangpinList.size()) { return; } JiSuan(); StopJiaoDu = (8 - item) * DanJiaoDu + DanJiaoDu / 2 - 90; if (StopJiaoDu < 0) { StopJiaoDu = 360 + StopJiaoDu; } setStart(); } /** * 停止旋轉回調接口 */ public interface WanCheng { void isOK(); } WanCheng wanCheng = null; public void setOK(WanCheng wanCheng) { this.wanCheng = wanCheng; } /** * 停止旋轉 */ public void setStop() { isStart = false; thread = null; everyAddJiaodu = everyJiaodu; nnn = 0; Message message = new Message(); message.what = 123; mHandler.sendMessage(message); } public void isStop(){ isStart = false; thread = null; everyAddJiaodu = everyJiaodu; nnn = 0; } /** * 開始旋轉 */ public void setStart() { if (isStart) { return; } if (thread == null) { newThread(); } isStart = true; thread.start(); } private void newThread() { thread = new Thread(this); }}

原理就是canvas的重繪,代碼還算清楚,就不多說啦


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合久久久久久中文网| 久久精品色欧美aⅴ一区二区| 91在线高清视频| 色综合影院在线| 国产精品一区二区电影| 亚洲福利在线视频| 国产精品黄色av| 欧美精品久久久久久久免费观看| 免费不卡在线观看av| www.亚洲一二| 亚洲影院在线看| 日本高清+成人网在线观看| 国产精品www网站| 国产精品白丝jk喷水视频一区| 亚洲欧美日韩第一区| 国产精品免费网站| 久久久久一本一区二区青青蜜月| 亚洲美女精品成人在线视频| 国产精品免费视频久久久| 欧美香蕉大胸在线视频观看| 欧美大片在线影院| 国产69精品久久久久99| 国产91在线播放九色快色| 中日韩午夜理伦电影免费| 亚洲欧美国产精品va在线观看| 国产成人精品一区二区三区| 亚洲欧美日韩一区在线| 国产精品精品久久久久久| 日本国产欧美一区二区三区| 亚洲xxxx做受欧美| 亚洲欧美精品伊人久久| 亚洲成人网久久久| 成人免费视频在线观看超级碰| 精品免费在线视频| 欧美极品xxxx| 久久久人成影片一区二区三区观看| 色综合视频网站| 欧美日韩第一视频| 国产精品福利无圣光在线一区| 97热在线精品视频在线观看| 亚洲精品999| 欧美激情精品久久久久久黑人| 中文字幕欧美日韩| 精品久久久久久中文字幕| 日韩中文字幕欧美| 91久久精品日日躁夜夜躁国产| 国外成人在线播放| 久久精品国产69国产精品亚洲| 亚洲国产古装精品网站| 欧美性xxxxx极品| 51久久精品夜色国产麻豆| 国产一区二区激情| 日韩中文在线不卡| 国产精品扒开腿做爽爽爽的视频| 国产精品专区第二| 国产精品永久免费视频| 日本精品视频网站| 国产日韩欧美视频| 欧美亚洲成人精品| 少妇精69xxtheporn| 午夜精品三级视频福利| 亚洲人线精品午夜| 九九热这里只有在线精品视| 国产视频精品va久久久久久| 亚洲国产欧美自拍| 亚洲毛茸茸少妇高潮呻吟| 久久精品国产96久久久香蕉| 久久精品中文字幕一区| www.99久久热国产日韩欧美.com| 日韩一二三在线视频播| 欧美精品九九久久| 日韩精品视频免费| 欧美性高潮床叫视频| 九九久久精品一区| 在线亚洲午夜片av大片| 日韩成人在线视频观看| 欧美性猛交xxx| 欧美在线亚洲一区| 国产又爽又黄的激情精品视频| 国产精品影片在线观看| 成人国产精品一区二区| 国产999在线观看| 78色国产精品| 91国内产香蕉| 国产999精品久久久| 中文字幕av一区中文字幕天堂| 日本老师69xxx| 国内精久久久久久久久久人| 久久久国产一区二区| 国产一区在线播放| 2019日本中文字幕| 欧洲美女7788成人免费视频| 78m国产成人精品视频| 91久久久久久久| 久久精品99久久久久久久久| 久久久久久欧美| 97精品在线视频| 国产99久久久欧美黑人| 国模视频一区二区| 欧美激情国产精品| 青青草一区二区| 九九热精品视频国产| 国产在线观看不卡| 日韩精品中文字幕久久臀| 国产精品久久久久av| 欧美日韩国产一区二区三区| 隔壁老王国产在线精品| 欧美午夜精品久久久久久久| 欧美成人一区在线| 久久久精品国产网站| 一区二区三区精品99久久| 欧美日韩国产精品| 日本一区二区三区四区视频| 高清欧美电影在线| 成人中文字幕在线观看| 亚洲免费高清视频| 久久精品国产一区二区三区| 2019中文在线观看| 97国产在线视频| 91禁国产网站| 一本色道久久88综合亚洲精品ⅰ| 国产精品久久久久久久av大片| 美日韩精品免费视频| 午夜精品视频在线| 亚洲精品国产精品国自产在线| 欧美性生活大片免费观看网址| 久久精品久久久久久国产 免费| 中文.日本.精品| 欧美亚洲成人免费| 人人澡人人澡人人看欧美| 亚洲国语精品自产拍在线观看| 国产欧美精品一区二区| 日韩美女视频免费看| 操91在线视频| 国产国语videosex另类| 国产91精品青草社区| www.日韩.com| 亚洲最大的成人网| 亚洲激情自拍图| 亚洲成色777777在线观看影院| 亚洲精品www久久久久久广东| 亚洲人成毛片在线播放| 欧美日韩中文字幕在线| 亚洲精品资源在线| 在线观看日韩欧美| 久久久久久国产精品久久| 日本欧美国产在线| 国产精品久久久久久久久久久不卡| 精品视频偷偷看在线观看| 中文字幕精品www乱入免费视频| 久久露脸国产精品| 亚洲第一av在线| 日韩精品在线免费观看视频| 成人免费观看49www在线观看| 欧美专区在线播放| 伊人伊成久久人综合网站| 欧美一级淫片videoshd| 欧美日韩在线第一页| 国产精品99久久久久久www| 欧美激情久久久久久| 久久久这里只有精品视频| 国产精品久久在线观看| 亚洲国产欧美日韩精品| 中文字幕亚洲欧美一区二区三区|