目前android端应用市场有很多随机选号的APP,但是功能大多很单一,基本上没有什么动画和互动效果。小胖月安卓版不仅可以随机选号、叫号功能,还可以设置数字范围。
1.随机选号
比如公司员工有300个人,就是300个号,范围设置1~300,假设一等奖10个号,那就抽10次,出过了一等奖的号码,在后面的奖中不会再出现。

核心代码主要使用到RandomUtil类,从数组中随机获取一个数,动画方面主要是android通用的动画效果。
package com.zjl.myapplication.utils;
import android.util.Log;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
// int num=(int)(Math.random()*(max-min+1)+min);
public class RandomUtil {
private static List<Integer> bag2 = new ArrayList<>();
private static int min;
private static int max;
public static void main(String[] args) {
min = 1;
max = 10;
bag2 = putNumber(min, max);
hide = 25;
while (true) {
if (isNotEmpty()) {
int a = getNumber(getLocation());
} else {
//bag2 = putNumber();
break;
}
}
}
//根据给定范围插入数据
public static List<Integer> putNumber(int min, int max) {
List<Integer> list = new LinkedList<>();
for (int i = min; i <= max; i++) {
list.add(i);
}
bag2 = list;
return bag2;
}
//返回从bag2里取的数
public static int getNumber(int location) {
int number = bag2.get(location);
bag2.remove(location);
return number;
}
public static int getLocation() {
//随机出百分率位置
int location = new Random().nextInt(bag2.size());
return location;
}
//数组不为空
public static boolean isNotEmpty(){
return bag2.size() != 0;
}
}
另外出过的号码需要从数组remove掉,防止重复号码出现:
dataList.remove(index); //把选中的数移除
//Log.e("nnn", "Thread: " + Arrays.toString(dataList.toArray()));
Message msg = Message.obtain(handler);
msg.what = 4;
msg.obj = data;
handler.sendMessage(msg);
onPause();
2.叫号功能
叫号功能使用的是安卓系统自带的TTS语音播报,初始化TextToSpeech类,一般在onCreate方法中初始化:
tts = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int i) {
if (i == TextToSpeech.SUCCESS) {
tts.setLanguage(Locale.CHINESE);
}
}
});
值得注意的是有些系统高度定制的手机使用TextToSpeech是无效果的,原因是系统没有内置的语音播报库,需要自己在应用商城下载安装后语音播报才有声音。如果大家在开发过程中遇到这类问题,先检查手机有没有安装语音播报库。
设置语音播报的文本:
private void choseNumber1() {
choseTv.postDelayed(new Runnable() {
@Override
public void run() {
int s = Integer.parseInt(tv1.getText().toString());
if (counts > 1) {
if (isOneNum) {
sb.append(s).append("");
choseTv.setText(sb.toString());
isOneNum = false;
} else {
sb.append("、").append(s);
choseTv.setText(sb.toString());
}
} else {
sb.append(s);
choseTv.setText(sb.toString());
}
if(TextUtils.isEmpty(customSound)){
tts.speak(tv1.getText().toString() + "号", TextToSpeech.QUEUE_FLUSH, null);
} else {
tts.speak(tv1.getText().toString() + "号" + customSound, TextToSpeech.QUEUE_FLUSH, null);
}
}
}, 80);
}
获取textView上的文本和自定义的播报内容拼接成完整的播报内容,通过View的postDelayed方法去刷新UI。
3.互动功能
互动模块功能集成的是腾讯兔小巢组件,该组件是免费的,大家有兴趣自己去了解一下,基本上几行代码就能搞定。通过接入这个组件,省去了很多繁琐的需求功能开发。减轻了开发者的工作量,而且简单使用。
第一步先去官网注册属于自己app的url,然后通过webview.load(url)即可成功接入该组件。
webview代码:
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);// 这个要加上
/* 获得 webview url,请注意url单词是product而不是products,products是旧版本的参数,用错地址将不能成功提交 */
String url = "https://support.qq.com/product/xxxxx";
/* WebView 内嵌 Client 可以在APP内打开网页而不是跳出到浏览器 */
WebViewClient webViewClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
super.shouldOverrideUrlLoading(view, url);
view.loadUrl(url);
return true;
}
};
webView.setWebViewClient(webViewClient);
webView.loadUrl(url);
互动界面截图:

可以在这个模块中评论、反馈意见等。
4.结尾
工程用到的权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.VIBRATE" />
APP演示:
郑重声明:本文章纯属原创,版权归属:深圳市中其信息技术有限公司
如不经过本人公司授权,引用、盗用文章及下载资源,后果自负!
点击下载demo
https://download.youkuaiyun.com/download/getmsg/85037205?spm=1001.2014.3001.5503
小胖月安卓版提供随机选号、叫号和互动功能,支持自定义数字范围,避免重复号码。随机选号利用RandomUtil类,叫号借助TextToSpeech类进行语音播报。互动部分集成腾讯兔小巢组件,简化开发工作。文章还提到了权限配置和APP演示。
2819

被折叠的 条评论
为什么被折叠?



