安卓自动播放的广告
来源:互联网 发布:c语言中有几个关键字 编辑:程序博客网 时间:2024/05/16 14:25
我们在停车场或公交车站有时候会看到LCD屏上面有滚动的广告,他们一般是通过安卓系统实现的。原理就是通过网络接口,或本地查询图片文件又或者直接调用app里的资源文件,通过viewpager加载imagerview,在通过scheduledExecutorService定时器循环播放图片。代码如下:
private View view; private ViewPager vp; private int[] pics = {R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4};//图片集合 private ImageView[] dots;//点的集合 private List<ImageView> list; private int imgsize;// 整个适配器的总长 private ScheduledExecutorService scheduledExecutorService;// 定时周期执行指定任务 private int currentIndex;// (自动播放时)定时周期要显示的图片的索引(viewpager中的图片位置) private int dotIndex = 1;// 设置当前点的索引 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragmentimage, container, false); initView(); return view; } private void initView() { vp = (ViewPager) view.findViewById(R.id.fraImaVp); initDot(); initViewpage(); } /*初始化下面的点*/ private void initDot() { LinearLayout ll = (LinearLayout) view.findViewById(R.id.fraImall); dots = new ImageView[pics.length]; for (int i = 0; i < pics.length; i++) { //动态添加滚轮下面的小点 dots[i] = new ImageView(getActivity()); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); int distance = 9; params.setMargins(distance, distance, distance, distance); dots[i].setLayoutParams(params); dots[i].setImageResource(R.drawable.dot_bg); ll.addView(dots[i]); } dots[0].setPressed(true); } /** * viewpager初始化 */ private void initViewpage() { scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); scheduledExecutorService.scheduleWithFixedDelay(new ViewPagerTask(), 6, 6, TimeUnit.SECONDS);// 自动播放 vp.addOnPageChangeListener(pageChangeListener); list = new ArrayList<>(); for (int i = 0; i < pics.length + 2; i++) { ImageView imageView = new ImageView(getActivity()); imageView.setScaleType(ImageView.ScaleType.FIT_XY); list.add(imageView); } setImgRes(pics.length + 2); } private void setImgRes(int length) { imgsize = length; list.get(0).setImageResource(pics[pics.length-1]); list.get(length-1).setImageResource(pics[pics.length-1]); for (int i = 0; i < length - 2; i++) { list.get(i + 1).setImageResource(pics[i]); } /*默认选中物理第二张图片*/ vp.setAdapter(new ImageViewAdapter(list)); vp.setCurrentItem(1); } ViewPager.OnPageChangeListener pageChangeListener = new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (positionOffset == 0.0) { if (position == 0) { vp.setCurrentItem(imgsize - 2, false); } else if (position == imgsize - 1) { vp.setCurrentItem(1, false); } } } @Override public void onPageSelected(int position) { currentIndex = position;// 把当前页的索引记住,方便跳转到下一页(这是必须的) if (currentIndex!=imgsize-1&¤tIndex!=0) { Logs.d("aaaa "+currentIndex); setCurrentDot(currentIndex); } } @Override public void onPageScrollStateChanged(int state) { } }; /** * 设置当前点的颜色 */ private void setCurrentDot(int currentIndex) { dots[currentIndex - 1].setPressed(true); dots[dotIndex].setPressed(false); dotIndex = currentIndex - 1; } /** * 来定时播放图片的线程 */ private class ViewPagerTask implements Runnable { @Override public void run() { currentIndex++; handler.obtainMessage().sendToTarget(); } } private Handler handler = new Handler() { public void handleMessage(Message msg) { // 使viewpager跳转到指定页(true:带有滑动效果) vp.setCurrentItem(currentIndex, true); } };
解析:
SetImageView方法:
* 除去第一个和最后一个imageview,其他的imageview依次设置相应的图片,顺序与imgs里的一样* 最后再把第一个imageview的图片设置为imgs中的最后一张图片* ,把最后一个imageview的图片设置为imgs中的第一张图片(因为向做滑动到第一张时* ,再向左滑动就到了最后一张;向右滑动一样,到了最后一张,再向右滑动就到了第一张)* 比如:要显示的图片为: A B C D四张图片,此时我们要把它们构造成: D {A B C D}A* 中间大括号里的就是要显示的图片,第一个D和最后一个A就是滑动到头时继续再滑动时逻辑上要展示的图片
OnepageListerner监听者:
/** * 监听viewpager的滑动过程,可获取滑动的百分比(arg1)参数。 * 这里判断的方法是:当滑动到第索引为0的那一页时(即:在逻辑上是到了第一张图片,此时viewpager会显示索引为0的那张图片 * (即在视觉效果上是最后一张的图片,因为,第一张过了再向左滑动,就是最后一张 * )。如果再这里不做相应的处理,再向左滑动就滑不动了,因为已经到了viewpager的第一张 * (索引为0),此时我们就要依靠参数arg1的值来判断是否已经完成了滑动到第一张 * ,当arg1的值为0.0时,即已经滑动完成,此时我们就把viewpager的页面跳转到viewpager的倒数第二张页面上 * ,使用setcurrentItem D{A B C D}A * (Int,boolean)方法,当Boolean取值为FALSE时,就没有滑动效果,直接跳转过去,由于当前页的图片和要跳转到的页面一样 * ,所以在视觉效果上看不出闪烁 ,这样就很自然的跳转到了倒数第二张,然后继续向左滑动 */主要布局很简单就是一个viewpager和包装点的LinearLayout.
<android.support.v4.view.ViewPager android:id="@+id/fraImaVp" android:layout_width="match_parent" android:layout_height="match_parent"/> <LinearLayout android:id="@+id/fraImall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="177dp" android:orientation="horizontal"> </LinearLayout>
滚轮点的背景R.drawable.dot_bg
其实就是两张图片
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/dot_press" android:state_focused="true"/> <item android:drawable="@drawable/dot_press" android:state_pressed="true"/> <item android:drawable="@drawable/dot"/></selector>
效果图
阅读全文
0 0
- 安卓自动播放的广告
- 实现广告自动播放切换的效果
- 安卓加载播放网页视频并用百度联盟广告替代屏dan蔽zhu网页部分广告 按返回自动退加到上个网页_源码
- 安卓开发:弹出自定义对话框自动播放视频(仿视频广告效果,使用mediaplayer和surfaceview做播放器)
- 安卓首页实现广告循环播放广播
- 安卓开发中实现广告图片自动切换的ViewPager广告栏的自定义类(可以根据广告数自动设置导航圆形图标个数)
- 安卓加入广告的网址
- video标签在安卓webview下无法自动播放问题的解决方法
- 安卓自学笔记:9:用AdapterViewFlipper创建一个可以自动播放的图片库
- 安卓分享音乐文件后点击可自动播放的问题
- 安卓广告平台
- 安卓广告轮播图
- android 广告自动循环播放(CircleViewPager)
- 腾讯视频自动播放-去广告
- 安卓,ios,ios微信, 自动播放音频;
- android的自动播放和伪无限循环的广告轮播实现
- 去视频播放的广告
- 优酷视频youku自动播放、删除广告的应用代码
- 2017.11.13-19工作总结
- Jstack
- 【机房收费系统】——命名问题
- MRAID3.0_翻译
- Spring Cloud构建微服务架构-创建“服务提供方”
- 安卓自动播放的广告
- [一图一世界] 面解析人工智能技术前世今生
- Jmap
- EXT2、 EXT3 和 EXT4 文件系统健康状况检查工具
- 读《文艺复兴三杰,达芬奇》
- TouchID 指纹解锁
- Python3.0Web学习。
- 2017网易游戏雷火盘古实习生招聘笔试真题:字符串编码 [python]
- 解析扁平化设计的流行配色方案