Android 抽奖转盘基于View的实现,主要有以下几点特性:
/**
* 开始转动
* @param pos 如果 pos = -1 则随机,如果指定某个值,则转到某个指定区域
*/
public void startRotate(int pos){
int lap = (int) (Math.random()*12) + 4;
int angle = 0;
if(pos < 0){
angle = (int) (Math.random() * 360);
}else{
int initPos = queryPosition();
if(pos > initPos){
angle = (pos - initPos)*60;
lap -= 1;
angle = 360 - angle;
}else if(pos < initPos){
angle = (initPos - pos)*60;
}else{
//nothing to do.
}
}
<com.hr.nipuream.luckpan.view.RotatePan
android:id="@+id/rotatePan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="78dp"
android:layout_centerHorizontal="true"
luckpan:pannum="8"
luckpan:names="@array/names"
luckpan:icons="@array/icons"
/>
将pannum改为你想要的数量,然后names和icons定义在arrays.xml文件中
<resources>
<string-array name="names">
<item>action</item>
<item>adventure</item>
<item>combat</item>
<item>moba</item>
<item>other</item>
<item>role</item>
<item>sports</item>
<item>words</item>
</string-array>
<string-array name="icons">
<item>action</item>
<item>adventure</item>
<item>combat</item>
<item>moba</item>
<item>other</item>
<item>role</item>
<item>sports</item>
<item>words</item>
</string-array>
</resources>
其中arrays.xml中的数量要和转盘的数量一致
经过实践和反馈,最多使用的转盘数为6、8,所以对这两种情况进行了兼容,其他数量的转盘可能会有些小问题,详细操作见Demo和更多信息。