iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在Android中利用 ViewPager实现一个循环播放功能
  • 522
分享到

如何在Android中利用 ViewPager实现一个循环播放功能

androidviewpagerage 2023-05-31 10:05:06 522人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关如何在Android中利用 ViewPager实现一个循环播放功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.初始化布局我们先来写一个ViewPager广告

这篇文章将为大家详细讲解有关如何在Android中利用 ViewPager实现一个循环播放功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1.初始化布局

我们先来写一个ViewPager广告条的布局:

<RelativeLayout xmlns:android="Http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent">  <android.support.v4.view.ViewPager    android:id="@+id/vp"    android:layout_width="match_parent"    android:layout_height="210dp"/>  <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_alignBottom="@id/vp"    android:background="#55000000"    android:gravity="center_horizontal"    android:orientation="vertical"    android:padding="5dp">    <TextView      android:id="@+id/tv_img_desc"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:text="这里是广告标题"      android:textColor="#ffffff"      android:textSize="16sp"/>    <!-- 动态添加小圆点,用一个水平的线性布局 -->    <LinearLayout      android:id="@+id/ll_dot_group"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:orientation="horizontal"/>  </LinearLayout></RelativeLayout>

此时的效果如下,是不是已经有了点模样:

如何在Android中利用 ViewPager实现一个循环播放功能

2.Activity实现

接下来进入到关键的实现代码,当然,Activity实现也难不倒我们,其中ViewPager数据,为了方便,本篇就直接用本地数据进行模拟了。而在实际项目开发数据大都来自网络

public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {  private List<ImageView> vpLists;  private LinearLayout ll_dot_group; //用来添加小圆点  private String[] imageDescArrs;  private TextView tv_img_desc;  private ViewPager vp;  private boolean isSwitchPager = false; //默认不切换  private int previousPosition = 0; //默认为0  private Handler handler = new Handler() {    public void handleMessage(android.os.Message msg) {      //更新当前viewpager的 要显示的当前条目      vp.setCurrentItem(vp.getCurrentItem() + 1);    }  };  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    initView();  }    private void initView() {    vp = (ViewPager) findViewById(R.id.vp);    ll_dot_group = (LinearLayout) findViewById(R.id.ll_dot_group);    tv_img_desc = (TextView) findViewById(R.id.tv_img_desc);    initViewPagerData();    vp.setAdapter(new ViewpagerAdapter());    //设置当前viewpager要显示第几个条目    int item = Integer.MAX_VALUE / 2 - (Integer.MAX_VALUE / 2 % vpLists.size());    vp.setCurrentItem(item);    //把第一个小圆点设置为白色,显示第一个textview内容    ll_dot_group.getChildAt(previousPosition).setEnabled(true);    tv_img_desc.setText(imageDescArrs[previousPosition]);    //设置viewpager滑动的监听事件    vp.addOnPageChangeListener(this);    //实现自动切换的功能    new Thread() {      public void run() {        while (!isSwitchPager) {          SystemClock.sleep(3000);          //拿着我们创建的handler 发消息          handler.sendEmptyMessage(0);        }      }    }.start();  }    private void initViewPagerData() {    imageDescArrs = new String[]{"标题1", "标题2", "标题3", "标题4", "标题5"};    vpLists = new ArrayList<ImageView>();    int imgIds[] = {R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e};    ImageView iv;    View dotView;    for (int i = 0; i < imgIds.length; i++) {      iv = new ImageView(this);      iv.setBackgroundResource(imgIds[i]);      vpLists.add(iv);      //准备小圆点的数据      dotView = new View(getApplicationContext());      dotView.setBackgroundResource(R.drawable.selector_dot);      //设置小圆点的宽和高      LayoutParams params = new LayoutParams(15, 15);      //设置每个小圆点之间距离      if (i != 0) {        params.leftMargin = 15;      }      dotView.setLayoutParams(params);      //设置小圆点默认状态      dotView.setEnabled(false);      //把dotview加入到线性布局中      ll_dot_group.addView(dotView);    }  }    private class ViewpagerAdapter extends PagerAdapter {    @Override    public int getCount() {      return Integer.MAX_VALUE;    }    //是否复用当前view对象    @Override    public boolean isViewFromObject(View arg0, Object arg1) {      return arg0 == arg1;    }    //初始化每个条目要显示的内容    @Override    public Object instantiateItem(ViewGroup container, int position) {      //拿着position位置 % 集合.size      int newposition = position % vpLists.size();      //获取到条目要显示的内容imageview      ImageView iv = vpLists.get(newposition);      //要把 iv加入到 container 中      container.addView(iv);      return iv;    }    //销毁条目    @Override    public void destroyItem(ViewGroup container, int position, Object object) {      //移除条目      container.removeView((View) object);    }  }  //当新的页面被选中的时候调用  @Override  public void onPageSelected(int position) {    //拿着position位置 % 集合.size    int newposition = position % vpLists.size();    //取出postion位置的小圆点 设置为true    ll_dot_group.getChildAt(newposition).setEnabled(true);    //把一个小圆点设置为false    ll_dot_group.getChildAt(previousPosition).setEnabled(false);    tv_img_desc.setText(imageDescArrs[newposition]);    previousPosition = newposition;  }  @Override  protected void onDestroy() {    //当Activity销毁的时候 把是否切换的标记置为true    isSwitchPager = true;    super.onDestroy();  }  @Override  public void onPageScrollStateChanged(int state) {  }  //当页面开始滑动  @Override  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {  }}

如上我们就解决了平滑过渡的问题,关键的地方就是ViewpagerAdapter:

getCount方法我们返回Integer.MAX_VALUE

public int getCount() {  return Integer.MAX_VALUE;}

初始化每个条目要显示的内容,我们拿着position位置 % 集合.size

@Overridepublic Object instantiateItem(ViewGroup container, int position) {  //拿着position位置 % 集合.size  int newposition = position % vpLists.size();  //获取到条目要显示的内容imageview  ImageView iv = vpLists.get(newposition);  //要把 iv加入到 container 中  container.addView(iv);  return iv;}

此时我们发现已经最后一个广告可以平滑过渡了,但是还有一个问题就是,那从第一张开始,我们往左滑呢?其实也很容易解决,就是设置第一个条目为Integer.MAX_VALUE的中间位置就可以了,我们来到initView方法中,设置当前viewpager要显示第几个条目:

int item = Integer.MAX_VALUE / 2 - (Integer.MAX_VALUE / 2 % vpLists.size());vp.setCurrentItem(item);

问题完美解决。

用到的Shape相关资源如下:

selector_dot.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">  <item android:drawable="@drawable/dot_enable" android:state_enabled="true"></item>  <item android:drawable="@drawable/dot_nORMal" android:state_enabled="false"></item></selector>

dot_enable.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" >  <corners android:radius="5dp"/>  <solid android:color="@android:color/white"/></shape>

dot_normal.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" >  <corners android:radius="5dp"/>  <solid android:color="@android:color/darker_gray"/></shape>

关于如何在Android中利用 ViewPager实现一个循环播放功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何在Android中利用 ViewPager实现一个循环播放功能

本文链接: https://www.lsjlt.com/news/224868.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在Android中利用 ViewPager实现一个循环播放功能
    这篇文章将为大家详细讲解有关如何在Android中利用 ViewPager实现一个循环播放功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.初始化布局我们先来写一个ViewPager广告...
    99+
    2023-05-31
    android viewpager age
  • 如何在Android中利用viewpager实现一个无限轮播功能
    如何在Android中利用viewpager实现一个无限轮播功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。小圆点属性dot_focused.xml<xml&nbs...
    99+
    2023-05-30
    viewpager android
  • Android中使用VideoView实现一个循环播放功能
    本篇文章给大家分享的是有关Android中使用VideoView实现一个循环播放功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体如下:package com.hangch...
    99+
    2023-05-31
    android videoview roi
  • 在Android开发中利用ViewPager实现一个轮播功能
    本篇文章给大家分享的是有关在Android开发中利用ViewPager实现一个轮播功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。ViewPager是一个常用的Android...
    99+
    2023-05-31
    viewpager android age
  • 在Android应用中实现一个录音播放功能
    这期内容当中小编将会给大家带来有关在Android应用中实现一个录音播放功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。播放音频文件public class PlayManager { private ...
    99+
    2023-05-31
    android roi
  • 如何在Android应用中实现一个无限循环轮播
    如何在Android应用中实现一个无限循环轮播?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、自定义控件属性新建自定义控件SliderLayout继承于Rel...
    99+
    2023-05-31
    android roi
  • 如何在Android中利用imageview实现一个图片缩放功能
    如何在Android中利用imageview实现一个图片缩放功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android 自定义imageview实现图片缩放实例详解&nb...
    99+
    2023-05-31
    android imageview age
  • Android中怎么利用ViewPager实现无限循环
    本篇文章为大家展示了Android中怎么利用ViewPager实现无限循环,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android ViewPager实现无限循环的实例ViewPager自身并不...
    99+
    2023-05-31
    android viewpager
  • 利用Android实现一个放大镜功能
    今天就跟大家聊聊有关利用Android实现一个放大镜功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。源码分析public class ShaderView extends View...
    99+
    2023-05-31
    android roi
  • 如何在vue中使用video实现一个播放器功能
    这期内容当中小编将会给大家带来有关如何在vue中使用video实现一个播放器功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。当现有video播放器不能满足需求时,需要自己对video进行封装。video...
    99+
    2023-06-06
  • Android开发中如何实现一个音乐播放器功能
    Android开发中如何实现一个音乐播放器功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。需求1:将内存卡中的MP3音乐读取出来并显示到列表当中从数据库中查询所有音乐数据...
    99+
    2023-05-31
    android 音乐播放器 roi
  • 在android中使用ViewPager怎么实现无限轮播功能
    这篇文章给大家介绍在android中使用ViewPager怎么实现无限轮播功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、布局<&#63;xml version="1.0" en...
    99+
    2023-05-31
    viewpager android age
  • android ViewPager如何实现一个无限轮播图
    这篇文章主要介绍android ViewPager如何实现一个无限轮播图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先我们需要建一个包,然后新建一个java类,名字随便起这个类我们需要随便继承自一个vi...
    99+
    2023-06-29
  • 如何在Android中实现一个音乐播放器
    如何在Android中实现一个音乐播放器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现过程导入项目所需的音乐文件、图标、背景等创建一个raw文件夹,将音乐文...
    99+
    2023-06-15
  • 怎么在Android中利用SeekBar实现音乐播放器功能
    怎么在Android中利用SeekBar实现音乐播放器功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一.Demo简介 利用AIDL为Activity绑定服务,...
    99+
    2023-05-31
    android seekbar roi
  • 如何在Android中利用MediaRecorder实现一个录像功能
    今天就跟大家聊聊有关如何在Android中利用MediaRecorder实现一个录像功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在AndroidManifest.xml加入以下...
    99+
    2023-05-31
    android mediarecorder roi
  • 怎么在Android中实现一个广告无限循环功能
    今天就跟大家聊聊有关怎么在Android中实现一个广告无限循环功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。代码实现:public class NewsHom...
    99+
    2023-05-30
    android
  • 如何在android应用中利用ViewPager与Fragment实现无限滑动功能
    本篇文章为大家展示了如何在android应用中利用ViewPager与Fragment实现无限滑动功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。利用ViewPager结合Fragment实现无限...
    99+
    2023-05-31
    viewpager fragment android
  • 如何在Android中利用Dialog实现一个对话框功能
    今天就跟大家聊聊有关如何在Android中利用Dialog实现一个对话框功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、普通对话框AlertDialog.Builder bui...
    99+
    2023-05-31
    android dialog roi
  • 如何在Android应用中利用SDK实现一个地图功能
    这期内容当中小编将会给大家带来有关如何在Android应用中利用SDK实现一个地图功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。找到控制台创建一个应用添加key名称,注意命名规范,还有就是下面的SHA...
    99+
    2023-05-31
    android sdk roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作