android开发分享Android使用ViewPager实现滚动广告

在一些类似于淘宝的电商网站上经常能够看到一些滚动的广告条,许多软件在首页也有类似的广告条,如图: 实现起来并不是很复杂的,结合网上的一些教程,实现了现在这样一个可以几

在一些类似于淘宝的电商网站上经常能够看到一些滚动的广告条,许多软件在首页也有类似的广告条,如图:

Android使用ViewPager实现滚动广告

实现起来并不是很复杂的,结合网上的一些教程,实现了现在这样一个可以几张图循环播放,并且可以手指滑动切换的效果。

工程文件结构:

Android使用ViewPager实现滚动广告

布局文件:

  <?xml version="1.0" encoding="utf-8"?>  <relativelayout xmlns:android="https://schemas.android.com/apk/res/android"   xmlns:tools="https://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent"   android:paddingbottom="@dimen/activity_vertical_margin"   android:paddingleft="@dimen/activity_horizontal_margin"   android:paddingright="@dimen/activity_horizontal_margin"   android:paddingtop="@dimen/activity_vertical_margin"   tools:context="yuxin.ad.mainactivity">     <android.support.v4.view.viewpager    android:id="@+id/viewpager"    android:layout_width="wrap_content"    android:layout_height="200dp"    android:adjustviewbounds="true" />     <linearlayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_alignbottom="@id/viewpager"    android:background="#33000000"    android:orientation="vertical"    android:padding="5dp">      <linearlayout     android:id="@+id/show_point"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_gravity="center_horizontal"     android:orientation="horizontal" />   </linearlayout>  </relativelayout>

最上面是一个viewpager,用来展示需要滚动播放的图片;下面是一个 线性布局,用来放最下面的几个小圆点,也可以在里面放一些textview等,小圆点的 数量是根据图片数量动态添加的。

mainactivity.java

  public class mainactivity extends appcompatactivity {   private viewpager viewpager;   // 存放图片   private list<imageview> imageviewlist;   private imageview imageview;   // 存放小圆点布局文件   private linearlayout layoutpointgroup;   // 线程开关,当activity销毁后,线程也应该停止运行   private boolean isstop = false;   private int previouspoint = 0;     @override   protected void oncreate(bundle savedinstancestate) {    super.oncreate(savedinstancestate);    setcontentview(r.layout.activity_main);    // 初始化    init();    //设置图片自动滚动    new thread(new runnable() {       @override     public void run() {      //如果activity未销毁则一直执行      while (!isstop) {       //先休息3秒钟       try {        thread.sleep(3000);       } catch (interruptedexception e) {        e.printstacktrace();       }       //以下代码发送到主线程中执行       runonuithread(new runnable() {        @override        public void run() {         viewpager.setcurrentitem(viewpager.getcurrentitem() + 1);        }       });      }     }    }).start();   }     private void init() {    viewpager = (viewpager) findviewbyid(r.id.viewpager);    layoutpointgroup = (linearlayout) findviewbyid(r.id.show_point);    imageviewlist = new arraylist<imageview>();      // todo:获取图片id    int[] imageids = {r.drawable.a, r.drawable.b, r.drawable.c, r.drawable.d, r.drawable.e};    for (int id : imageids) {     // 构造新的图片对象,并根据id 设置图片背景     imageview = new imageview(this);     imageview.setimageresource(id);     // 所有图片都存放在 imageviewlist 里面     imageviewlist.add(imageview);       // 构造小点     view v = new view(this);     // 设置小点的宽和高     linearlayout.layoutparams params = new linearlayout.layoutparams(8, 8);     // 设置小点的左边距     params.leftmargin = 12;     v.setlayoutparams(params);     // 设置小点是否可用,默认都不可用,当不可用时,小点是透明的,否则是白色的     v.setenabled(false);     // 设置小点的背景,这个背景是使用xml文件画的一个小圆点     v.setbackgroundresource(r.drawable.pointer_selector);     // 把小点添加到它的布局文件中     layoutpointgroup.addview(v);    }      // 计算应用打开时显示的第一项 integer.max_value /2 - 3=0    int index = integer.max_value / 2 - 3;    // 给mviewpager设置数据    viewpager.setadapter(new mypageradapter());    // 给mviewpager设置页面滑动事件    viewpager.setonpagechangelistener(new myonpagechangelistener());      // 设置应用打开时显示的第一项,index的值为0    // 使用这种方式得到的0,和直接写0有什么区别呢?    // 直接写0,应用打开后不能直接向右滑动,因为viewpager中存image位置不能为负值,只能先向左滑动    // 这种方式得到的0,可以实现应用一打开,就可以向右滑动    viewpager.setcurrentitem(index);   }     private class mypageradapter extends pageradapter {      @override    public int getcount() {     return integer.max_value;    }      @override    public boolean isviewfromobject(view view, object object) {     return view == object;    }      // 当一页滑出去的时候将它销毁    @override    public void destroyitem(viewgroup container, int position, object object) {     container.removeview(imageviewlist.get(position % imageviewlist.size()));    }      // 向容器中添加图片,由于我们要实现循环滑动的效果,所以要对position取模    @override    public object instantiateitem(viewgroup container, int position) {     container.addview(imageviewlist.get(position % imageviewlist.size()));     return imageviewlist.get(position % imageviewlist.size());    }   }     private class myonpagechangelistener implements viewpager.onpagechangelistener {      // 开始    @override    public void onpagescrolled(int position, float positionoffset, int positionoffsetpixels) {      }      // 进行时    @override    public void onpageselected(int position) {     // 当页面滑动结束时,先对页面位置取模     position = position % imageviewlist.size();     // 将上一个点的可用性设置为false     layoutpointgroup.getchildat(previouspoint).setenabled(false);     // 把当前点的可用性设置为true     layoutpointgroup.getchildat(position).setenabled(true);     // 把当前位置值赋值给previouspoint     previouspoint = position;    }      // 结束    @override    public void onpagescrollstatechanged(int state) {      }   }     // 当activity销毁时,让线程停止   @override   public void ondestroy() {    isstop = true;    super.ondestroy();   }  }

具体功能实现可以看代码里的注释,写的十分详细了。

未选中的小圆点pointer_disable.xml:

  <?xml version="1.0" encoding="utf-8"?>  <shape xmlns:android="https://schemas.android.com/apk/res/android"   android:shape="oval" >     <!-- 设置圆角半径 -->   <corners android:radius="0.5dip" />     <!-- 设置填充的颜色 -->   <solid android:color="#55000000" />    </shape>      

选中时的小圆点pointer_focus.xml:

  <?xml version="1.0" encoding="utf-8"?>  <shape xmlns:android="https://schemas.android.com/apk/res/android"   android:shape="oval" >     <corners android:radius="0.5dip" />     <solid android:color="#aaffffff" />    </shape>

小圆点选择器:

  <?xml version="1.0" encoding="utf-8"?>  <selector xmlns:android="https://schemas.android.com/apk/res/android">   <!-- 选中时,小点为白色 -->   <item android:drawable="@drawable/pointer_focus" android:state_enabled="true"></item>   <!-- 未选中时,小点为透明色 -->   <item android:drawable="@drawable/pointer_disable" android:state_enabled="false"></item>  </selector>

完整源码下载

以上就是android开发分享Android使用ViewPager实现滚动广告的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

www.ctvol.com true Article android开发分享Android使用ViewPager实现滚动广告

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/901569.html

(0)
上一篇 2021年10月24日 上午8:13
下一篇 2021年10月24日 上午8:14

精彩推荐