直播中,最重要的是互动,在视频直播源码中,游戏是增强观众和主播的互动的重要功能,下面为大家介绍直播间转盘游戏功能,并介绍其直播app代码实现方式

如上图所示,直播间下部的紫色部分是一个转盘面板,四周的扇形区域放置各种礼物,点击中间的开始抽奖,转盘开始转动,停止的时候会随机指向一个区域,抽奖人将获得这个区域的礼物,这个礼物可以用来打赏主播。

这一游戏的实现原理是,当用户点击开始抽奖的时候,请求服务端接口,返回将要中奖的礼物的信息,然后让转盘转动到指定区域,然后给出中奖提示。

涉及到的直播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<TurntableConfigBean> mTurntableConfigBeanList;private TurntableConfigBean mSelTurnTableBean;private List<TurntableGiftBean> mTurntableGiftBeanList;private List<TurntableGiftBean> 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);
}
 @Overridepublic 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() {@Overridepublic void onAnimationEnd(Animator animation) {if (mContext != null) {((LiveActivity) mContext).openLuckPanWinWindow(winResultGiftBeanList);}}});requestPanGiftList();
}

private void requestPanGiftList() {LiveHttpUtil.getTurntable(new HttpCallback() {@Overridepublic 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<TurntableConfigBean> mTurntableConfigBeanList, List<TurntableGiftBean> turntableGiftBeanList) {/*转盘发起按钮数据*/if(mTurntableConfigBeanList!=null){String coinName= CommonAppConfig.getInstance().getCoinName();int widetSize=mTurnTableBtnTimes.length;int dataSize=mTurntableConfigBeanList.size();for(int i=0;i<widetSize;i++){if(dataSize==i){break;}TurntableConfigBean turntableConfigBean=mTurntableConfigBeanList.get(i);mTurnTableBtnTimes[i].setText(WordUtil.getString(R.string.pan_turn_times,turntableConfigBean.getTimes()));mTurnTableBtnPrices[i].setText(turntableConfigBean.getCoin()+ coinName);}}

转盘相关数据

        /*转盘数据*/if(turntableGiftBeanList!=null){int widetSize=mPrizeIcons.length;int dataSize=turntableGiftBeanList.size();for(int i=0;i<widetSize;i++){if(dataSize==i){break;}ImageView imgPriceIcon=mPrizeIcons[i];TextView tvPriceName=mPrizeNames[i];TurntableGiftBean turntableGiftBean=turntableGiftBeanList.get(i);if(turntableGiftBean.getType()==1||turntableGiftBean.getType()==0){tvPriceName.setText(turntableGiftBean.getType_val());}ImgLoader.display(mContext,turntableGiftBean.getThumb(),imgPriceIcon);}}
}@Override
public void onClick(View v) {int i = v.getId();if (i == R.id.btn_start) {turnTable(v);} else if (i == R.id.btn_one) {selTurnConfigBean(0);} else if (i == R.id.btn_ten) {selTurnConfigBean(1);} else if (i == R.id.btn_hundred) {selTurnConfigBean(2);} else if (i == R.id.btn_game_rule) {if(mContext!=null){((LiveActivity)mContext).openLuckPanTipWindow();}} else if (i == R.id.btn_win_record) {if(mContext!=null){((LiveActivity)mContext).openLuckPanRecordWindow();}}
}

关于抽奖

//抽奖
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() {@Overridepublic void onSuccess(int code, String msg, String[] info) {if(code==0&&info.length>0){String listStr= JsonUtil.getString(info[0],"list");List<TurntableGiftBean>luckPanBeanList=JsonUtil.getJsonToList(listStr  ,TurntableGiftBean.class);setResult(luckPanBeanList);}else{ToastUtil.show(msg);}}@Overridepublic void onFinish() {view.setEnabled(true);getDialog().setCancelable(true);super.onFinish();}});}}}private void setResult(List<TurntableGiftBean> 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;i<size;i++){if(mTurntableGiftBeanList.get(i).getType()==0){rotate(i);break;}}}
}private void selTurnConfigBean(int i) {if(mTurntableConfigBeanList!=null&&mTurntableConfigBeanList.size()>i){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代码,,这样就在视频直播源码中实现了直播间转盘游戏功能。
本文声明原创,转载请注明作者:云豹科技官方

直播app代码公布:视频直播源码转盘功能的实现相关推荐

  1. 一对一视频直播系统开源一对一视频交友源码程序

    一对一视频直播系统相较于传统直播系统有更强的社交性和工具性.传统的直播可以作为独立软件平台去运营,面对的受众群体也十分广泛,可以说是"全民直播"."直播+"的概 ...

  2. 一对一直播app大热,使用源码或自主开发一对一APP需要了解哪些技术?...

    现今社会 ,每个人都有手机,所以app市场成了各行各业主攻市场,在短视频已经占领用户大部分时间的同时,直播行业也成了热门,也让软件开发商把战场转向直播app开发,特别是一对一直播软件开发,那么开发原理 ...

  3. 短视频APP开发分解,短视频系统源码特点功能难度剖析

    现在的短视频APP开发功能嵌入其他软件的占大多数,比如微博.微信录像等,其实都是短视频,当然还有专门的比如抖音.快手等.那么既然短视频如此火热,那么短视频APP开发特点是什么?主要功能?难度大不大?下 ...

  4. 一对一 视频聊天源码,不要小瞧社交平台的盈利方式

    视频聊天源码的出现填补了社交行业没有代表型软件的空缺,它不仅提升了交友双方的交互性,还有效稳定了推广.收益方式.尽管现在娱乐软件都有些倾向于社交软件的发展,但事实证明,它们的社交方式完全不够,无法满足 ...

  5. Android短视频系统源码功能测试(个人总结完整版)

    Android短视频系统源码功能测试包含短视频系统源码的安装卸载测试,界面测试,业务功能测试,短视频系统源码特性测试,交叉事件测试,兼容性测试,升级更新测试,消息通知测试,功能键测试,手势测试等 1- ...

  6. 视频聊天源码,IOS 保存图片、视频到自定义相簿

    视频聊天源码,IOS 保存图片.视频到自定义相簿实现的相关代码 1.检测相簿以及创建相簿: /** 创建自定义相册 */ +(void)isExistFolder:(NSString * _Nonnu ...

  7. 帝国CMS开发主播/直播视频网站源码+WAP/可封装APP运营

    正文: 帝国CMS开发主播/直播视频网站源码+WAP/可封装APP运营,这系统支持三端,就例如PC+WAP+APP,有兴趣的自己去体验吧,其它的就没什么好介绍的了. 程序: wwuef.lanzouy ...

  8. 直播交友app开发,一对一视频直播聊天APP定制,语音直播交友软件源码

    直播类app近两年十分受欢迎,一对一视频直播交友,直播交友app目前主要是语音直播间陪玩,视频直播间打赏,pk,视频相亲,七人语音直播间,多人视频直播间,语音直播交友软件源码! 1,首页主播列表:包含 ...

  9. Android直播中短视频源码的功能实现

    直播app是当下流行的视频社交类平台,也是重要的流量渠道,短视频同样是重要的流量之王,在直播中加入短视频源码功能,实现强强联合,有效提高了直播app的可玩性和用户粘性.云豹直播作为优质的直播平台源码提 ...

最新文章

  1. sdut 2129树结构练习——判断给定森林中有多少棵树(并查集)
  2. 【Python数据预处理】 归一化(按列减均值,除方差),标准化(按列缩放到指定范围),正则化(范数)
  3. 第六讲:Obj-C 内存管理4 - 自动释放池
  4. Sharepoint学习笔记—Site Definition系列-- 2、创建Content Type
  5. 暑期训练日志----2018.8.6
  6. 应用 | 同学,该学MyCat实际应用案例与MyCat读写分离了
  7. 元素内容必须由格式正确的字符数据或标记组成_Blockly Fields积木表单元素
  8. 【下载】深入oracle数据库专用虚拟机环境部署方案《VirtualBox+OELR5U7x86_64+Oracle11gR2》...
  9. Mp3Play.ocx控件让音乐之声响起来
  10. React Native状态机和应用设计思路
  11. 10月20日中国域名商解析量十四强:易名中国季军
  12. 计算机组成原理 蒋本珊pdf,计算机组成原理 蒋本珊 习题解答.pdf
  13. java servlet面试题_JavaWeb之JSP和servlet面试题附答案
  14. ai钢笔工具怎么描线_AI分享:歪龙教你玩转钢笔工具
  15. 七年切图仔如何面试大厂web前端?(沟通软技能总结) | 掘金技术征文
  16. 成都博兰科技有限公司助宝兰网进入云贵川渝市场 www.beylai.com
  17. 我的世界boat运行库JAVA10_boat运行库导入下载
  18. RSF 分布式服务框架-服务端工作原理
  19. Linux进程间通信信号量
  20. Fiddler显示IP的设置方法

热门文章

  1. jQuery学习笔记(3)之Ajax下
  2. 计算机控制系统的模拟控制器,导 读 利用计算机代替常规的模拟控制器,使它成为控制系统的一个组成部分,这种有计算机参加控制的系统简称为计算机控制系统。...
  3. 85.You want to configure and schedule offline database backups to run automatically. Which tool or u
  4. Google Dremel 原理 - 如何能 3 秒分析 1PB
  5. 2022/12/17 mysql 索引基本原理解读
  6. 乌合之众 -- 群体的意见和信念
  7. 上周热点回顾(12.5-12.11)
  8. 通俗易懂讲讲手机通信芯片那些事儿
  9. mathematica求定积分和不定积分
  10. 电商指标项目-背景及技术选型