(一)安卓智能广告机,实现广告分屏播放(根据图片/视频链接进行加载播放)
本文将持续更新,打造一个完整的智能广告发布系统。
一.效果
本篇最终实现播放效果:
广告机上部播放图片,下部播放视频。
二.用到的工具
(1)使用 convenientbanner作为图片轮播的工具
(2)使用 glide 作为图片缓存的工具
(3)使用 videocache 作为视频缓存的工具
(4)视频播放采用安卓自带的 videoview.
以下为相关工具依赖:
//图片缓存框架 compile 'com.github.bumptech.glide:glide:3.7.0' //图片轮播框架 compile 'com.bigkoo:convenientbanner:2.0.5' //视频缓存控件 compile 'com.danikula:videocache:2.7.0'
三.实现逻辑及代码
3.1逻辑简述
主activity包含fragment。在activity中绑定并加载fragment,在fragment中进行加载图片--》播放图片;加载视频--》播放视频。
3.2 activity布局代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v4.view.ViewPagerandroid:id="@+id/mViewPager"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"/></LinearLayout>
3.3 fragment布局代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:background="#000000"android:layout_width="match_parent"android:layout_height="match_parent"><com.bigkoo.convenientbanner.ConvenientBannerxmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/convenientBanner"android:layout_width="match_parent"android:layout_height="500dp"app:canLoop="true"/><VideoViewandroid:id="@+id/mVideoView"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>
3.4 activity逻辑代码
使用viewpager进行fragment绑定,并且viewpager可以加载多个fragment从而使用多场景(不同布局节目)广告播放。
private List<Fragment> mFragment; private ViewPager mViewPager; @Override protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ad_play);initData();initView(); }private void initView() {mViewPager = (ViewPager) findViewById(R.id.mViewPager);mViewPager.setOffscreenPageLimit(mFragment.size());//设置适配器mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {//选中的item@Overridepublic Fragment getItem(int position) {return mFragment.get(position);}//返回item的个数@Overridepublic int getCount() {return mFragment.size();}}); }private void initData() {mFragment = new ArrayList<>();mFragment.add(new AdvertFragment()); }
3.5 fragment逻辑代码
convenientBanner在进行图片加载时,默认第一次加载时根据url就行网络加载,此后每次会从本地取(会自动判断url是否已经加载过)。
private ConvenientBanner convenientBanner;private String[] images;private List<String> networkImage;private VideoView videoView;//视频缓存代理private HttpProxyCacheServer proxy;private View advert;//protected ImageLoader@Overridepublic View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {advert = inflater.inflate(R.layout.advert_fragment,container,false) ;initImages();initVideo();return advert;}private void initVideo() {proxy = new HttpProxyCacheServer.Builder(getActivity()).maxCacheSize(1024 * 1024 * 1024).maxCacheFilesCount(20).build();videoView = advert.findViewById(R.id.mVideoView);videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {@Overridepublic boolean onError(MediaPlayer mp, int what, int extra) {videoView.stopPlayback(); //播放异常,则停止播放,防止弹窗使界面阻塞return true;}});playVideoOne();//播放第一个视频}//加载并播放图片private void initImages() {//将目标图片url装进数组images = new String[]{"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1561790287581&di=07fef06182929d93688a94f9130b4d9a&imgtype=0&src=http%3A%2F%2Fpic37.nipic.com%2F20140113%2F8800276_184927469000_2.png","https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1561790287581&di=07fef06182929d93688a94f9130b4d9a&imgtype=0&src=http%3A%2F%2Fpic37.nipic.com%2F20140113%2F8800276_184927469000_2.png","https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1561811928059&di=5e95696c17100ddcd9a38914406c14db&imgtype=0&src=http%3A%2F%2Fpic31.nipic.com%2F20130801%2F11604791_100539834000_2.jpg","https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1561811952654&di=27c19b7c1780478f08ee24616fde7a43&imgtype=0&src=http%3A%2F%2Fimg.redocn.com%2Fsheji%2F20141219%2Fzhongguofengdaodeliyizhanbanzhijing_3744115.jpg"};convenientBanner = advert.findViewById(R.id.convenientBanner);//网络加载图片networkImage = Arrays.asList(images);convenientBanner.setPages(new CBViewHolderCreator<NetWorkImageViewHolderTest>() {@Overridepublic NetWorkImageViewHolderTest createHolder() {return new NetWorkImageViewHolderTest();}},networkImage)//切换时间.startTurning(5000)//是否开启手动切换.setManualPageable(false);}//加载并播放视频public void playVideoOne(){String proxyUrl = proxy.getProxyUrl("https://vd2.bdstatic.com/mda-jftw7y8w3c826gpt/hd/mda-jftw7y8w3c826gpt.mp4?auth_key=1561806031-0-0-cf277fe52ac69ebf634ffd248c40c683&bcevod_channel=searchbox_feed&pd=unknown&abtest=all"); //视频url拼接日期,实现按日更新videoView.setVideoPath(proxyUrl); //为videoview设置播放路径,而不是设置播放urlvideoView.start();videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mPlayer) {//playVideoTwo(); //监听视频一的播放完成事件,播放完毕就播放视频二}});}// public void playVideoTwo(){ // String proxyUrl = proxy.getProxyUrl(videoTwoUrl); // videoView.setVideoPath(proxyUrl); // videoView.start(); // videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { // @Override // public void onCompletion(MediaPlayer mPlayer) { // playVideoThree(); // } // }); // } // public void playVideoThree(){ // String proxyUrl = proxy.getProxyUrl(videoThreeUrl); // videoView.setVideoPath(proxyUrl); // videoView.start(); // videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { // @Override // public void onCompletion(MediaPlayer mPlayer) { // playVideoOne();//视频三播放完后播放视频一,从而实现轮播 // } // }); // }
(一)安卓智能广告机,实现广告分屏播放(根据图片/视频链接进行加载播放)相关推荐
- 什么是wifi霸屏神器?用WiFi霸屏广告机打广告是什么体验?
什么是wifi霸屏神器?用WiFi霸屏广告机打广告是什么体验? WiFi霸屏神器是营销及创意广告展示神器,让成千上万的人10秒钟记住你! 中科呐喊是有中科爱讯出品的集广告促销展示.活动互动.个人创意. ...
- 电脑分屏软件_Fcpx分屏插件 41组视频分割可自定义分屏动画效果插件 可分9屏 Split Pop...
Fcpx分屏插件 41组视频分割可自定义分屏动画效果插件 这是一套目前小编感觉最好用的Fcpx分屏插件,一.支持4K.二.最多可分9屏.三.可微调参数调整最佳展示.四.41种效果简洁大方,涵盖各类流行 ...
- 安卓智能电视-关闭开机广告
安卓电视关闭广告-准备工具 普通U盘一只 WiFi adb工具 root工具 蓝牙鼠标 智能电视关闭广告-安装工具 将所有的安卓安卓包,放入到U盘更目录即可 装好安装包的U盘连接到,智能电,并安装完成 ...
- html广告加图片,视频某段加一张图片覆盖 视频中间段画面有广告加一张图片遮住...
看电影.看电视剧时,尤其是看到高潮部分或是一些悬疑时刻,突然的就给你插段广告,瞬间心凉了半截,广告啊神马的最讨厌啦.那么我们可以有办法把视频中间段的广告画面给遮掉如不喜欢还可以去掉.下面一起学习在视频 ...
- 安卓 加载服务器图片不显示图片,android 从服务器加载.9图
问题描述: APP启动时, 广告页的图片是从服务器上获取, 这个图片一般需要全屏显示, 这个怎么适配呢? 解决方法1: 如果使用android:scaleType="fitXY"属 ...
- 华为nova3e怎么分屏_华为手机怎么分屏?边看视频边聊微信!不是所有手机都能做到...
阅读本文前,请您先点击上面的蓝色字体"自媒创业",再点击"关注",这样您就可以继续免费收到最新文章了.每天都有分享.完全是免费订阅,请放心关注 为什么很多时候电 ...
- android 视频做背景图片,视频后面怎么加背景图片?安卓手机给视频添加背景图片的方法...
狸窝是帮助用户解决问题 提供教程解决方案 在这个过程中有使用我们自己开发的软件 也有网上找的工具 只要帮助用户解决问题就好!同意则往下继续了解学习 ... 注意此教程方案是:『安卓手机端教程方案』.很 ...
- vue实现分屏_TSINGSEE青犀视频开发WebRTC如何在Vue.js 配合video标签实现多分屏功能?...
TSINGSEE青犀视频研发的视频平台都支持分屏播放,当我们需要通过新的框架来搭建一套新的产品的时候,就要考虑到如何通过新的方式来构建这样一套多屏分割的界面. 我们上次在<我之前做过的所有产品都 ...
- 关于uniappH5安卓机拨打电话报错 tel:177*******6 的网页无法加载,因为: net::ERR_UNKNOWN_URL_SCHEME
介绍一下报错具体情景: 1.项目:uniapp H5 2.报错手机平台:安卓 3.使用方法: (1)uni.makePhoneCall() 不兼容 Android,所以可以通过uni.getSyste ...
最新文章
- 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...
- 机器人是如何规划路径的?动画演示一下吧
- 并发--基本的线程机制
- 题目1156:谁是你的潜在朋友
- 求质数算法的N种境界 (N 10) zz
- 推荐几个配色和图标网站
- SaaS 通识系列 1:云计算是什么
- 程序员提高编程能力万无一失的办法
- 安卓天气查询预报APP软件的制作
- 阿里巴巴矢量图标 iconfont 下载图标分辨率小一点、并占得内存小一点呢
- python Unicode字符与数值转换
- ACM卡常数(各种玄学优化)
- quartus 中无法选择USB-Blaster下载程序的问题。
- import settings 错误
- 管家婆批量收款:提高收款效率的新功能
- [2010年终大礼]破壳而出的琉璃之鸟 汉化补丁 第二版(win8兼容版发布)
- win10配置apache
- Linux 文件和目录管理
- Java——编辑、编译和运行
- ngixn负载+keepalived高可用shell脚本
热门文章
- 墨尔本大学计算机本科学费,墨尔本大学学费一年多少?墨尔本大学学费贵吗?...
- u盘变成RAW格式怎么修复?好用的教程分享
- IT专业人士如何高效的学习专业知识
- 项目中常用的github库集合
- ARP***原理及解决方法(NBTSCAN扫描工具下载和nbtscan使用方法)
- 6.1.4 6.1.5完美越狱
- SaaS模式在国内的基本现状研究
- python 处理json多层嵌套_python解析多层嵌套json
- 促进高校内涵发展教学质量提高数码钢琴实训室建设方案
- 三季度业绩中通PK百世:快递巨头再掀起价格血战,谁是最后赢家?