Android 使用ViewPager实现左右循环滑动图片
ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵
1. 首先看一些layout下的xml
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <android.support.v4.view.ViewPager
- android:id="@+id/viewPager"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
- <RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <LinearLayout
- android:id="@+id/viewGroup"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_marginBottom="30dp"
- android:gravity="center_horizontal"
- android:orientation="horizontal" >
- </LinearLayout>
- </RelativeLayout>
- </FrameLayout>
使用ViewPager首先需要引入android-support-v4.jar这个jar包。自己不要忘记加
- package com.example.viewpagerdemo;
- import android.app.Activity;
- import android.os.Bundle;
- import android.support.v4.view.PagerAdapter;
- import android.support.v4.view.ViewPager;
- import android.support.v4.view.ViewPager.OnPageChangeListener;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.ViewGroup.LayoutParams;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- public class TwoActivity extends Activity implements OnPageChangeListener{
- /**
- * ViewPager
- */
- private ViewPager viewPager;
- /**
- * 装点点的ImageView数组
- */
- private ImageView[] tips;
- /**
- * 装ImageView数组
- */
- private ImageView[] mImageViews;
- /**
- * 图片资源id
- */
- private int[] imgIdArray ;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ViewGroup group = (ViewGroup)findViewById(R.id.viewGroup);
- viewPager = (ViewPager) findViewById(R.id.viewPager);
- //载入图片资源ID
- imgIdArray = new int[]{R.drawable.item01, R.drawable.item02, R.drawable.item03, R.drawable.item04,
- R.drawable.item05,R.drawable.item06, R.drawable.item07, R.drawable.item08};
- //将点点加入到ViewGroup中
- tips = new ImageView[imgIdArray.length];
- for(int i=0; i<tips.length; i++){
- ImageView imageView = new ImageView(this);
- imageView.setLayoutParams(new LayoutParams(10,10));
- tips[i] = imageView;
- if(i == 0){
- tips[i].setBackgroundResource(R.drawable.page_indicator_focused);
- }else{
- tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused);
- }
- LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
- LayoutParams.WRAP_CONTENT));
- layoutParams.leftMargin = 5;
- layoutParams.rightMargin = 5;
- group.addView(imageView, layoutParams);
- }
- //将图片装载到数组中
- mImageViews = new ImageView[imgIdArray.length];
- for(int i=0; i<mImageViews.length; i++){
- ImageView imageView = new ImageView(this);
- mImageViews[i] = imageView;
- imageView.setBackgroundResource(imgIdArray[i]);
- }
- //设置Adapter
- viewPager.setAdapter(new MyAdapter());
- //设置监听,主要是设置点点的背景
- viewPager.setOnPageChangeListener(this);
- //设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动
- viewPager.setCurrentItem((mImageViews.length) * 100);
- }
- /**
- *
- * @author xiaanming
- *
- */
- public class MyAdapter extends PagerAdapter{
- @Override
- public int getCount() {
- return Integer.MAX_VALUE;
- }
- @Override
- public boolean isViewFromObject(View arg0, Object arg1) {
- return arg0 == arg1;
- }
- @Override
- public void destroyItem(View container, int position, Object object) {
- ((ViewPager)container).removeView(mImageViews[position % mImageViews.length]);
- }
- /**
- * 载入图片进去,用当前的position 除以 图片数组长度取余数是关键
- */
- @Override
- public Object instantiateItem(View container, int position) {
- ((ViewPager)container).addView(mImageViews[position % mImageViews.length], 0);
- return mImageViews[position % mImageViews.length];
- }
- }
- @Override
- public void onPageScrollStateChanged(int arg0) {
- }
- @Override
- public void onPageScrolled(int arg0, float arg1, int arg2) {
- }
- @Override
- public void onPageSelected(int arg0) {
- setImageBackground(arg0 % mImageViews.length);
- }
- /**
- * 设置选中的tip的背景
- * @param selectItems
- */
- private void setImageBackground(int selectItems){
- for(int i=0; i<tips.length; i++){
- if(i == selectItems){
- tips[i].setBackgroundResource(R.drawable.page_indicator_focused);
- }else{
- tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused);
- }
- }
- }
- }
上面的代码中,当只有3张图片或者2张图片的时候,滑动存在BUG问题的修改如下
- destroyItem(View container, int position, Object object)方法中不removeView
- @Override
- public void destroyItem(View container, int position, Object object) {
- // ((ViewPager)container).removeView(mImageViews[position % mImageViews.length]);
- }
- instantiateItem(View container, int position)增加异常扑捉
- @Override
- public Object instantiateItem(View container, int position) {
- try {
- ((ViewPager)container).addView(mImageViews[position % mImageViews.length], 0);
- }catch(Exception e){
- //handler something
- }
- return mImageViews[position % mImageViews.length];
- }
Android 使用ViewPager实现左右循环滑动图片的更多相关文章
- Android使用ViewPager实现左右循环滑动及轮播效果
边界的时候会看到一个不能翻页的动画,可能影响用户体验.此外,某些区域性的ViewPager(例如展示广告或者公告之类的ViewPager),可能需要自动轮播的效果,即用户在不用滑动的情况下就能够看到其 ...
- Android使用ViewPager实现无限循环滑动及轮播(附源代码)
MainActivity例如以下: package cc.ww; import java.util.ArrayList; import android.app.Activity; import and ...
- Android 使用ViewPager 做的半吊子的图片轮播
Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...
- android笔记:ViewPager实现界面的滑动
最近在学习ViewPager实现界面的滑动,拜读了郭神的博客文章,并抽取归纳了自己对ViewPager的理解. ViewPager实现界面滑动的步骤如下: 1.在xml布局内加入控件android.s ...
- android 解决ViewPager双层嵌套的滑动问题
解决ViewPager双层嵌套的滑动问题 今天我分享一下ViewPager的双层嵌套时影响内部ViewPager的触摸滑动问题 之前在做自己的一个项目的时候,遇到广告栏图片动态切换,我第一时间想到的就 ...
- android 自定义Viewpager实现无限循环
; i < imageUrls.length; i ++){ ADInfo info = new ADInfo(); info.setUrl(imageUrls[i]); info.setCon ...
- Android之ViewPager组件实现左右滑动View
什么是ViewPager VIewPager是安卓3.0之后提供的新特性,继承自ViewGroup,专门用来实现左右滑动切换View的效果.如果想向下兼容需要 android-support-v4.j ...
- 详细分析Android viewpager 无限循环滚动图片
由于最近在忙于项目,就没时间更新博客了,于是趁着周日在房间把最近的在项目中遇到的技术总结下.最近在项目中要做一个在viewpager无限滚动图片的需求,其实百度一下有好多的例子,但是大部分虽然实现了, ...
- android:使用gallery和imageSwitch制作可左右循环滑动的图片浏览器
为了使图片浏览器左右无限循环滑动 我们要自己定义gallery的adapter 假设要想自己定义adapter首先要了解这几个方法 @Override public int getCount() { ...
随机推荐
- .Net使用SSH.NET通过SSH访问Linux主机
使用了SSH.NET库,添加引用dll至项目,以下代码显示了点击按钮后SSH链接Linux主机执行命令并返回命令执行结果 protected void btnExcute_Click(object s ...
- react-native-router-flux 下部导航
github url:https://github.com/aksonov/react-native-router-flux API: https://github.com/aksonov/react ...
- 关于操作DC时的资源泄露
首先应明确一个概念 句柄, 关于句柄的详细介绍请见这里 对于句柄的使用小结:借来的要归还,创建的要释放,选出的要选入[尤其是针对GDI的一些句柄而言,如HPEN,HBRUSH等] 1. 使用GetDC ...
- MySql中的事务嵌套
1.Mysql中的事务必须是InnoDB.Berkeley DB引擎,myisam不支持. 2.Mysql是不支持嵌套事务的,开启了一个事务的情况下,再开启一个事务,会隐式的提交上一个事务. 3.My ...
- 转 jQuery(图片、相册)插件代码实例
jQuery想必大部分前端er都知道甚至很熟悉了,网上有数以万计的优秀的jQuery插件以及教程,今天收集了一些关于图片.相册的jQuery插件代码,希望会对你有所帮助. 1. 3D Gallery ...
- 【结构型】Adapter模式
Adapter模式主要意图是将类或接口转换成客户期望的接口,从而使得原本不兼容.无法在一起工作的接口可以在一起工作.该模式有两种形式的Adapter法,一是继承方式:二是对象关联依赖方式. 继承方式A ...
- 转:40多个关于人脸检测/识别的API、库和软件
文章来自于:http://blog.jobbole.com/45936/ 自从谷歌眼镜被推出以来,围绕人脸识别,出现了很多争议.我们相信,不管是不是通过智能眼镜,人脸识别将在人与人交往甚至人与物交互中 ...
- Android中的四层架构,五块区域
1. Linux内核层Android系统是基于Linux 2.6内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动.音频驱动.照相机驱动.蓝牙驱动.Wi-Fi驱动.电源管理等.2 ...
- 51单片机C语言学习笔记6:51单片机C语言头文件及其使用
很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...
- 公网IP和私有IP
IP地址是为了区分网络中不同主机所分配的一个地址,通过IP地址可以访问到每一台主机. IP地址分为公有地址和私有地址,公有地址由Internet NIC负责(比如中国互联网信息中心http://ip. ...
