产品需求,不得不干
android 实现个卡片抽奖 翻转卡片 轮转抽奖
如图:
刚开始不知道怎么下手,GitHub找了类似的,不多,但还是找到了可以借鉴demo,就拿来抄了抄,总得先写完作业不是,借鉴的demo就不上链接了,写这篇的时候,功能都上了一周多了,借鉴的demo的地址找不到了(手动捂脸🤦♂️),这里表示抱歉,如果原作者看到请私信。
不会画图,就文字描述吧
整个可轮转view是个自定义的view,可通过方法,开启转动,重置数据状态,每个小卡片也是自定义的view,有正面图 ,背景图,和边框view,通过接口,可获取正面imageview(同样,可拓展方法获取背景imageview),也可通过方法更改view 状态,选中,翻转和是否需要翻转动画完毕之后,向外回调状态;
整个流程就是:开启转动,全部卡片翻转到背面,开始跑圈,轮转每个卡片view,并设置倒计时 生成个随机数,当倒计时结束,停止转动,随机数就是转动结束后选中的卡片索引,更改这个索引的卡片的状态,完成翻转。
轮转代码:
public void startGames() {
isGameRunning = true;
isTryToStop = false;
currentSpeed = DEFAULT_SPEED;
new Thread(new Runnable() {
@Override
public void run() {
while (isGameRunning) {
post(new Runnable() {
@Override
public void run() {
int preIndex = currentIndex;
currentIndex++;
if (currentIndex >= itemViewArr.length) {
currentIndex = 0;
}
itemViewArr[preIndex].setSelect(false);
itemViewArr[currentIndex].setSelect(true);
if (isTryToStop && currentSpeed == DEFAULT_SPEED && stayIndex == currentIndex) {
isGameRunning = false;
postDelayed(new Runnable() {
@Override
public void run() {
itemViewArr[currentIndex].setAction(true);
itemViewArr[currentIndex].setBack(false);
}
}, 1000);
}
}
});
try {
Thread.sleep(getInterruptTime());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}