博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ViewPager的基本使用--可左右循环切换也可自动切换
阅读量:6321 次
发布时间:2019-06-22

本文共 3452 字,大约阅读时间需要 11 分钟。

ViewPager也算是Android自带的常用控件之一,但是有可能会无法直接调用,所以只需要将工程目录里/libs/android-support-v4.jar该jarAdd to Build Path就可以了。

先来看看效果图吧:

                                                          

一、首先完成布局文件:

从效果图可以分析出,整体的布局为一个RelativeLayout布局,上面是一个ViewPager,下面是一个LinearLayout,在LinearLayout里面,有一个TextView 和 几个小圆点,所以可以很容易的写出布局文件了。

二、在MainActivity中加载布局文件

1.通过ID查找出各个控件。

ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);		LinearLayout pointGroup  = (LinearLayout) findViewById(R.id.point_group);		TextView imageDesc = (TextView) findViewById(R.id.image_desc);

2.初始化图片资源和指示点。

ArrayList
imageList = new ArrayList
(); for(int i = 0; i

这个代码,先是创建了一个ArrayList来保存图片资源,然后通过一个循环,将每一张图片加载进入imageList,在加载图片的同时,也将指示点添加进入pointGroup指示点的资源ID--R.drawable.point_bg,是通过自己在/res/drawable中自己创建得来的,在drawable文件夹中,创建了三个XML文件,分别用来绘制不同状态的指示点。

其中point_bg.xml文件代码为:

point_nomal.xml文件代码为:

point_focured.xml文件代码为:

3.将资源添加进入viewPager。

viewPager.setAdapter(new MyPagerAdapter());		private class MyPagerAdapter extends PagerAdapter {		/**		 * 获得页面的总数		 */		@Override		public int getCount() {			return Integer.MAX_VALUE;      // 因为需要无限循环,所以这里就不写imageList.size()		}		/**		 * 获得相应位置上的view		 * container  view的容器,其实就是viewpager自身		 * position	  相应的位置		 */		@Override		public Object instantiateItem(ViewGroup container, int position) {			// 给container添加内容			container.addView(imageList.get(position%imageList.size()));						return imageList.get(position%imageList.size());		}				/**		 * 判断view和object的对应关系		 */		@Override		public boolean isViewFromObject(View view, Object object) {			return view == object;		}		/**		 * 销毁对应位置上的object		 */		@Override		public void destroyItem(ViewGroup container, int position, Object object) {			container.removeView((View) object);			object = null;		}	}

现在就完成了基本的设置了,可以运行程序看一下效果了,现在已经可以循环的左右切换了。

三、增加自动切换

想要实现自动切换的方法比较多,大概分为:使用定时器;开启子线程;使用ColckManager;用handler发送延时信息。在此我们采用比较简单的方式--用handler发送延时信息。

// 判断是否执行动画	private boolean isRunning = false;	private Handler handler = new Handler(){		public void handleMessage(android.os.Message msg) {			// 滑动到下一页			viewPager.setCurrentItem(viewPager.getCurrentItem()+1);						if(isRunning) {				handler.sendEmptyMessageDelayed(0, 2000);			}		};	};
 

以上代码建立在onCreate()外,用于判断是否接收到了handler发送来的信息,如果接收到了,就将viewpager的显示后移一位延时2000毫秒后再发送出去。

然后在onCreate()方法中添加:

isRunning = true;		handler.sendEmptyMessageDelayed(0, 2000);

这样就完成了viewPager中图片的自动切换,但是在运行程序后发现,图片下面的Text和指示点并没有跟着切换,所以还需要添加一下代码:

viewPager.setOnPageChangeListener(new OnPageChangeListener() {						/**			 * 页面切换后调用			 * postion  新的页面位置			 */			@Override			public void onPageSelected(int position) {								position = position%imageList.size();								// 设置文字描述内容				imageDesc.setText(imageDescriptions[position]);				// 改变指示点的状态				pointGroup.getChildAt(position).setEnabled(true);				pointGroup.getChildAt(lastPointPosition).setEnabled(false);				lastPointPosition = position;			}						/**			 * 当页面正在滚动的时候			 */			@Override			public void onPageScrolled(int position, float positionOffset, int arg2) {							}						/**			 * 当页面状态发生变化的时候			 */			@Override			public void onPageScrollStateChanged(int arg0) {							}		});

setOnPageChangeListener()是一个监听ViewPager页面变化的方法,其实的onPageSelected()是 当页面切换后调用的,在此我们重写了该方法。当切换到新的一页的时候,Text 和 指示点也跟着变换。

四、Demo下载

转载于:https://www.cnblogs.com/whyalwaysme/p/4391688.html

你可能感兴趣的文章
java反射机制
查看>>
实现线程串行执行
查看>>
类作为友元
查看>>
(一)ubuntu 12.04 安装php5.5
查看>>
虚拟机上安装ArchLinux笔记
查看>>
Linux 下Shell脚本删除过期文件
查看>>
Centos 6.5系统安装配置图解教程
查看>>
微软警告称Flame病毒利用Windows漏洞
查看>>
网络高可用性之流量镜像和端口流量控制
查看>>
我的友情链接
查看>>
Linux服务名重命名
查看>>
vb.net中的部分代码
查看>>
Oracle 11g dataguard主库坏块修复
查看>>
Maven学习总结(七)——eclipse中使用Maven创建Web项目
查看>>
Memcached
查看>>
主宰全球的10大算法
查看>>
[软件架构:设计模式系列C#篇]系列教程汇总
查看>>
nginx平滑升级
查看>>
大型网站技术架构(七)网站的可扩展性架构
查看>>
算法竞赛入门经典系列
查看>>