ViewPager的无限轮播,主要以实现为主。代码如下

首先定义activity_viewpager.xml:

<LinearLayout
            android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><android.support.v4.view.ViewPager
                android:id="@+id/viewpager"android:layout_width="wrap_content"android:layout_height="200dp" /><LinearLayout
                android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="-20dp"android:orientation="vertical"><TextView
                    android:id="@+id/viewpager_head_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_vertical"android:textColor="@color/text_black"/><LinearLayout
                    android:id="@+id/points"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="horizontal" /></LinearLayout></LinearLayout>

point的效果

point_enable.xml

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

point_normal.xml

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

point_background.xml

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

在ViewPagerActivity.java去实现具体功能,代码如下所示:

public class ViewPagerActivity extends Activity {private ViewPager mViewPager;private LinearLayout mLinearLayout;private FirstVPageAdapter mFirstVPageAdapter;private TextView mVPtitle;private List<ImageView> mImageViewList;// 圆圈标志位private int pointIndex = 0;private int[] listImages {R.mipmap.photo1,R.mipmap.phonto2,R.mipmap.house_photo3,R.mipmap.photo4, R.mipmap.photo5};// 文字private String[] listTexts = {"", "", "", ""};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_viewpager);initView();}public void initView() {mLinearLayout = (LinearLayout) findViewById(R.id.points);mVPtitle = (TextView) findViewById(R.id.viewpager_head_title);mViewPager = (ViewPager) findViewById(R.id.viewpager);mViewPager.setCurrentItem(0);// 定时循环mHandler.postDelayed(mRunnable, 3000);initData();initAction();}final Handler mHandler = new Handler();Runnable mRunnable = new Runnable() {@Overridepublic void run() {mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);mHandler.postDelayed(this, 3000);}};View view;private void initData() {mImageViewList = new ArrayList<>();for (int i = 0; i < listImages.length; i++) {// imageViewImageView imageView = new ImageView(this);imageView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));imageView.setBackgroundResource(listImages[i]);imageView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//在这里做点击事件Intent intent = new Intent();intent.setClass(ViewPagerActivity.this, Activity.class);startActivity(intent);mHandler.removeCallbacks(mRunnable);}});mImageViewList.add(imageView);}points();mFirstVPageAdapter = new FirstVPageAdapter(mImageViewList);mViewPager.setAdapter(mFirstVPageAdapter);}public void points() {mLinearLayout.removeAllViews();for (int i = 0; i < 5; i++) {LayoutParams params;view = new View(this);params = new LayoutParams(20, 20);params.leftMargin = 40;view.setBackgroundResource(R.drawable.point_background);view.setLayoutParams(params);view.setEnabled(false);mLinearLayout.addView(view);}}/*** 初始化事件*/private void initAction() {PageListener mPageListener = new PageListener();//监听事件mViewPager.setOnPageChangeListener(mPageListener);//计算启始位置int index = (Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2 % mImageViewList.size());//用来触发监听器mViewPager.setCurrentItem(index);mLinearLayout.getChildAt(pointIndex).setEnabled(true);}class PageListener implements OnPageChangeListener {@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageSelected(int position) {int newPosition = position % listImages.length;
//            mVPtitle.setText(titles[newPosition]);mLinearLayout.getChildAt(newPosition).setEnabled(true);mLinearLayout.getChildAt(pointIndex).setEnabled(false);// 更新标志位pointIndex = newPosition;}}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();mHandler.removeCallbacks(mRunnable);}
}

接着实现ViewPagerAdapter.java适配器,代码如下所示:

public class FirstVPageAdapter extends PagerAdapter {private List<ImageView> mList;public FirstVPageAdapter(List<ImageView> list) {this.mList = list;}@Overridepublic int getCount() {return Integer.MAX_VALUE;}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {container.addView(mList.get(position%mList.size()));return mList.get(position%mList.size());}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(mList.get(position%mList.size()));}
}

好了,viewpager的无限轮播实现完成了。

android ViewPager实现无限轮播和设置监听事件相关推荐

  1. springboot+flowable第四节(设置监听事件)

    目录 1. 执行监听事件写法 2. 任务监听事件写法 3. 创建流程 4. 事件执行类 5. 启动流程 监听事件分为:执行监听.任务监听. 1. 执行监听事件写法 <flowable:execu ...

  2. Bootstrap4----网络系统、图像形状、轮播、滚动监听、多媒体对象、下拉菜单导航及按钮

    Bootstrap4 1.网络系统 规则 屏幕最多分为12列(同一行数字相加应为12) 用行来创建水平的列组 为自动设置外边距内边距,需将网格每一行需要放在设置了 .container (固定宽度) ...

  3. 有关 给Layout设置监听事件后,与Layout子控件的响应关系

    如果你的linearlayout中的孩子们都监听了click事件了,linearlayout是拿不到事件的. 在Android系统的中,硬件触发的事件最开始是Activity拿到的,然后它向里面的Vi ...

  4. html中单选按钮设置监听事件,浅谈监听单选框radio改变事件(和layui中单选按钮改变事件),单选框radio...

    浅谈监听单选框radio改变事件(和layui中单选按钮改变事件),单选框radio 若是只引用jquery的话,监听单选按钮改变事件如下: 男 女 $(document).ready(functio ...

  5. ViewPager两种方式实现无限轮播

    给自己的忠告:虽然轮子很好用,但是使用轮子的前提是:如果不去封装一些复杂的功能,自己会用最基本的方法写一个,不然再好的轮子那也是别人的,当自己项目遇到和轮子不一样的地方,那就只能束手无策或者改人家的源 ...

  6. android viewpager无限轮播

    概述 github地址:https://github.com/Double2hao/ViewPagerCycleTest 一直很好奇ViewPager无限轮播的实现方式,于是稍微研究了下,作此文记录之 ...

  7. Android商城开发----viewPager实现广告轮播(在首页Fragment中实现)

    Android商城开发----在商城首页Fragment使用viewPager实现广告轮播 写在前面:本篇文章建立在创建底部导航栏之后,对商城首页进行开发.创建底部导航栏的内容请查看:Android开 ...

  8. Android使用ViewPager实现图片轮播和手势滑动

    ViewPager常用来实现图片的轮播,比如淘宝首页,会把一些促销的商品的图片和描述信息来回的播放,这就是典型的使用ViewPager实现的. ViewPager属于布局管理器,允许用户通过页面翻转查 ...

  9. android画廊效果的轮播图,ViewPage实现无限轮播画廊效果

    1. 效果图 2. 布局文件 主要使用的 android:clipChildren的意思:是否限制子View在其范围内.再父布局和viewpager中设置该属性  ,要显示三个界面 ,还要设置marg ...

最新文章

  1. 压缩与反压缩之 COMPRESS 与 EXPAND
  2. VTK:PolyData之CellTreeLocator
  3. linux写一个脚本杀进程,linux下如何自动检测并重新启动一个死掉的进程,然后再把它杀死:)(shell脚本实现)...
  4. CSS让文字在元素内绝对居中!!!【ie和谷歌】
  5. 如果你想写自己的Benchmark框架
  6. 在家办公这半年,让我开始热爱生活
  7. 一个四维的人在三维世界里到底长什么模样?
  8. 程序设计与算法----递归之放苹果问题
  9. android程序的建立,创建第一个Android程序 HelloWorld
  10. PHP递归删除目录及目录下的文件
  11. 循环数组最大子段和--51nod1050
  12. 【ArcGIS】利用字段计算器按 OSM 道路等级生成道路速度
  13. [原创]记某app内购破解 – 安卓逆向菜鸟的初体验
  14. Visual Studio 2022调节字体大小
  15. 三国杀开源系列之四-工程目录分析107@365
  16. 汇编语言笔记-ARM汇编器伪操作
  17. “公私结合”打造完整会员营销体系
  18. 佛说:人就是苦今生修来生
  19. 网上有一款测试人血压的软件,中国和加拿大合作新研究开发出一款可通过自拍测量血压的软件...
  20. Error: Cannot find module ‘D:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js

热门文章

  1. Java---GUI编程详解
  2. FSCapture[个人认为最好的截图工具]
  3. python画曲线图
  4. 支付宝wap支付详情
  5. Google 程序员都是怎么研究 AI 的?
  6. 高速逻辑电平LVDS、LVPECL、CML一站式详解
  7. 【音视频】利用ffmpeg实现:音视频的提取,rtmp推流等
  8. defy手机 小技能 问题
  9. 【23考研】计算机择校信息库-福建高校计算机相关专业22专业目录分类汇总(按专业课分类汇总)
  10. 【自然语言处理】最大熵马尔可夫模型