直播中,最重要的是互动,在视频直播源码中,游戏是增强观众和主播的互动的重要功能,下面为大家介绍直播间转盘游戏功能,并介绍其直播app代码实现方式
如上图所示,直播间下部的紫色部分是一个转盘面板,四周的扇形区域放置各种礼物,点击中间的开始抽奖,转盘开始转动,停止的时候会随机指向一个区域,抽奖人将获得这个区域的礼物,这个礼物可以用来打赏主播。
这一游戏的实现原理是,当用户点击开始抽奖的时候,请求服务端接口,返回将要中奖的礼物的信息,然后让转盘转动到指定区域,然后给出中奖提示。
public class LuckPanDialogFragment extends AbsDialogFragment implements View.OnClickListener {
private ImageView[] mPrizeIcons;
private TextView[] mPrizeNames;
private TextView[] mTurnTableBtnTimes;
private TextView[] mTurnTableBtnPrices;
private View mPan;
private ObjectAnimator mAnimator;
private List mTurntableConfigBeanList;
private TurntableConfigBean mSelTurnTableBean;
private List mTurntableGiftBeanList;
private List winResultGiftBeanList;
@Override
protected int getLayoutId() {
return R.layout.dialog_luck_pan;
}
@Override
protected int getDialogStyle() {
return R.style.dialog2;
}
@Override
protected boolean canCancel() {
return true;
}
@Override
protected void setWindowAttributes(Window window) {
window.setWindowAnimations(R.style.bottomToTopAnim);
WindowManager.LayoutParams params = window.getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.gravity = Gravity.BOTTOM;
window.setAttributes(params);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mPan = findViewById(R.id.pan);
mPrizeIcons = new ImageView[8];
mPrizeNames = new TextView[8];
mPrizeIcons[0] = (ImageView) findViewById(R.id.img_0);
mPrizeIcons[1] = (ImageView) findViewById(R.id.img_1);
mPrizeIcons[2] = (ImageView) findViewById(R.id.img_2);
mPrizeIcons[3] = (ImageView) findViewById(R.id.img_3);
mPrizeIcons[4] = (ImageView) findViewById(R.id.img_4);
mPrizeIcons[5] = (ImageView) findViewById(R.id.img_5);
mPrizeIcons[6] = (ImageView) findViewById(R.id.img_6);
mPrizeIcons[7] = (ImageView) findViewById(R.id.img_7);
mPrizeNames[0] = (TextView) findViewById(R.id.name_0);
mPrizeNames[1] = (TextView) findViewById(R.id.name_1);
mPrizeNames[2] = (TextView) findViewById(R.id.name_2);
mPrizeNames[3] = (TextView) findViewById(R.id.name_3);
mPrizeNames[4] = (TextView) findViewById(R.id.name_4);
mPrizeNames[5] = (TextView) findViewById(R.id.name_5);
mPrizeNames[6] = (TextView) findViewById(R.id.name_6);
mPrizeNames[7] = (TextView) findViewById(R.id.name_7)
;
mTurnTableBtnTimes=new TextView[3];
mTurnTableBtnPrices=new TextView[3];
mTurnTableBtnTimes[0]=findViewById(R.id.tv_turn_time1);
mTurnTableBtnTimes[1]=findViewById(R.id.tv_turn_time2);
mTurnTableBtnTimes[2]=findViewById(R.id.tv_turn_time3);
mTurnTableBtnPrices[0]=findViewById(R.id.tv_turn_coin1);
mTurnTableBtnPrices[1]=findViewById(R.id.tv_turn_coin2);
mTurnTableBtnPrices[2]=findViewById(R.id.tv_turn_coin3);
findViewById(R.id.btn_start).setOnClickListener(this);
findViewById(R.id.btn_one).setOnClickListener(this);
findViewById(R.id.btn_ten).setOnClickListener(this);
findViewById(R.id.btn_hundred).setOnClickListener(this);
findViewById(R.id.btn_game_rule).setOnClickListener(this);
findViewById(R.id.btn_win_record).setOnClickListener(this);
mAnimator = ObjectAnimator.ofFloat(mPan, "rotation", 0);
mAnimator.setDuration(3000);
mAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
mAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
if (mContext != null) {
((LiveActivity) mContext).openLuckPanWinWindow(winResultGiftBeanList);
}
}
});
requestPanGiftList();
}
private void requestPanGiftList() {
LiveHttpUtil.getTurntable(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if(code==0&& info.length > 0){
String jsonData=info[0];
mTurntableConfigBeanList= JsonUtil.getJsonToList(JsonUtil.getString(jsonData,"config"),TurntableConfigBean.class);
mTurntableGiftBeanList= JsonUtil.getJsonToList(JsonUtil.getString(jsonData,"list"),TurntableGiftBean.class);
layingData(mTurntableConfigBeanList,mTurntableGiftBeanList);
selTurnConfigBean(0);
}
}
});
}
private void layingData(List mTurntableConfigBeanList, List turntableGiftBeanList) {
/*转盘发起按钮数据*/
if(mTurntableConfigBeanList!=null){
String coinName= CommonAppConfig.getInstance().getCoinName();
int widetSize=mTurnTableBtnTimes.length;
int dataSize=mTurntableConfigBeanList.size();
for(int i=0;i
/*转盘数据*/
if(turntableGiftBeanList!=null){
int widetSize=mPrizeIcons.length;
int dataSize=turntableGiftBeanList.size();
for(int i=0;i
//抽奖
private void turnTable(final View view) {
if(mContext instanceof LiveActivity){
LiveActivity liveActivity= (LiveActivity) mContext;
String liveUid=liveActivity.getLiveUid();
String stream=liveActivity.getStream();
if(mSelTurnTableBean!=null&&mTurntableGiftBeanList!=null){
view.setEnabled(false);
getDialog().setCancelable(false);
LiveHttpUtil.turn(mSelTurnTableBean.getId(),liveUid,stream, new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if(code==0&&info.length>0){
String listStr= JsonUtil.getString(info[0],"list");
ListluckPanBeanList=JsonUtil.getJsonToList(listStr ,TurntableGiftBean.class);
setResult(luckPanBeanList);
}else{
ToastUtil.show(msg);
}
}
@Override
public void onFinish() {
view.setEnabled(true);
getDialog().setCancelable(true);
super.onFinish();
}
}
);
}
}
}
private void setResult(List luckPanBeanList) {
this.winResultGiftBeanList=luckPanBeanList;
if(luckPanBeanList!=null&&luckPanBeanList.size()>0){
TurntableGiftBean lastResultBean= luckPanBeanList.get(luckPanBeanList.size()-1);
int index=mTurntableGiftBeanList.indexOf(lastResultBean);
rotate(index);
}else{
int size=mTurntableGiftBeanList.size();
for(int i=0;ii){
mSelTurnTableBean=mTurntableConfigBeanList.get(i);
}
}
private void rotate(int index) {
if(index<0||index>7){
L.e("index is outBound");
return;
}
L.e("rotate-----index------> " + index);
float targetAngle = 3960 - (45 * index + 22.5f);
float rotation = mPan.getRotation() % 360;
mAnimator.setFloatValues(rotation, targetAngle);
mAnimator.start();
}
@Override
public void onDestroy() {
if (mAnimator != null) {
mAnimator.cancel();
mAnimator.removeAllListeners();
mAnimator.removeAllUpdateListeners();
}
LiveHttpUtil.cancel(LiveHttpConsts.GET_TURN_TABLE);
LiveHttpUtil.cancel(LiveHttpConsts.TURN);
mAnimator = null;
super.onDestroy();
}
}
以上就是关于转盘游戏的直播app代码,,这样就在视频直播源码中实现了直播间转盘游戏功能。
本文声明原创,转载请注明作者:云豹科技官方