`
king_tt
  • 浏览: 2232721 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用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实现左右循环滑动图片

    该资源中有两个文件,一个是直接写的可以自动轮播和手动轮播的demo,一个是自定义了一个bannerview控件,这个控件实现了手动轮播,类似于android中的广告图,如果要实现自动轮播只需添加一个定时器即可。 博文网址:...

    Android ViewPager实现左右循环滑动及轮播效果

    在标题“Android ViewPager实现左右循环滑动及轮播效果”中,提到的关键技术点是使ViewPager具备循环滑动和轮播功能。下面我们将深入探讨如何实现这些效果。 1. **ViewPager基础**: ViewPager最初是Android ...

    ViewPager左右循环滑动

    类似用户引导页,可以滑动,左右滑动已经有大量实现,但循环滑动实现较少或者实现的效果不是很好。 效果不好主要体现在大概以下四个方面:图片少的时候会崩溃...故此处实现任何图片的左右自然的循环滑动以及自动播放。

    ViewPager无限循环左右滑动效果

    在Android开发中,ViewPager是一个非常常用的组件,它用于展示可以左右滑动的页面序列,常用于实现类似Tab切换或者图片轮播的效果。本教程将详细讲解如何实现ViewPager的无限循环左右滑动效果。 首先,我们需要了解...

    Android使用ViewPager实现左右循环滑动及小圆点监听

    至此,我们就实现了Android中的ViewPager无限循环滑动以及小圆点监听。在实际项目中,可以根据需求调整小圆点的样式、动画效果等,以满足不同的UI设计。在压缩包`Android10_ViewPagerDemo01`中,包含了完整的示例...

    android 使用viewpager实现图片轮播,左右可以无限制滑动

    在Android开发中,实现一个美观且功能完善的...以上就是使用`ViewPager`实现图片轮播,包括自动轮播和左右无限制滑动的详细步骤。这个解决方案已经经过验证,可以放心使用。记得根据实际需求调整代码,以适应你的项目。

    ViewPager实现循环滚动切换Fragment

    总的来说,实现ViewPager循环滚动切换Fragment需要对Android的Fragment管理和动画系统有深入理解,并且需要进行一些定制化的工作。通过自定义`PagerAdapter`、`PageTransformer`以及合理的生命周期管理,我们可以...

    实现ViewPager的左右循环滑动

    下面,我们将深入探讨如何实现ViewPager的左右循环滑动,并且不修改`PagerAdapter`。 首先,我们需要创建一个新的类,继承自`ViewPager`。这个类将覆盖`ViewPager`的`onPageScrolled()`和`onPageSelected()`方法,...

    ViewPager实现左右循环滑动

    类似用户引导页,可以滑动,左右滑动已经有大量实现,但循环滑动实现较少或者实现的效果不是很好。 效果不好主要体现在大概以下四个方面:图片少的时候会崩溃...故此处实现任何图片的左右自然的循环滑动以及自动播放。

    Viewpager左右循环滚动

    总结,"Viewpager左右循环滚动"是一个Android开发中的高级技巧,涉及到对ViewPager的深入理解和自定义,通过这样的实现,我们可以创建出更加丰富的用户体验,让用户在浏览内容时享受到流畅的循环滑动效果。

    viewpager实现无限循环滚动幻灯片

    在标题"viewpager实现无限循环滚动幻灯片"中,我们要讨论的是如何利用ViewPager实现一个能够无限循环滚动的幻灯片效果,这通常在广告轮播器或类似功能中很有用。 首先,ViewPager本身并不直接支持无限循环,它默认...

    android viewpager 左右无限循环滑动 + 小圆点指示器

    本教程将详细讲解如何实现ViewPager的左右无限循环滑动,并结合自定义小圆点指示器来增强用户体验。 首先,我们需要理解ViewPager的基本用法。ViewPager继承自PagerAdapter,其核心在于`PagerAdapter`的`...

    viewpager左右循环、定时滑动

    要实现循环滑动,我们需要扩展ViewPager的这一特性,创建一个自定义的ViewPager子类,并重写其`onPageScrolled()`、`onPageSelected()`等方法,以处理边界情况。 在自定义的ViewPager中,我们可以监听滑动事件,当...

    viewpager 实现一屏幕多页循环滚动

    标题"viewpager 实现一屏幕多页循环滚动"涉及到的技术点是如何让ViewPager不仅展示多个页面,而且能够实现循环滚动,即当滑动到最后一页时,会无缝跳转到第一页,反之亦然。这种效果常见于轮播图或者推荐栏等场景。 ...

    ViewPager巧用偷梁换柱实现自动循环滚动

    一种常见的方法是使用第三方库,如`androidx.carousel.viewpager2`或者`SmartViewPager`等,它们已经实现了自动循环滚动的功能。但如果我们想要自己实现,我们可以创建一个自定义的PagerAdapter,并在其中添加必要的...

    viewpager实现图片循环播放实例

    本实例将详细介绍如何利用ViewPager实现图片的循环播放功能。 首先,我们需要理解ViewPager的基本原理。ViewPager是Android Support Library中的一个控件,它可以承载多个Fragment或者View,并根据用户的滑动操作在...

    使用ViewPager实现左右滑动翻页.zip

    这个压缩包“使用ViewPager实现左右滑动翻页.zip”很可能包含了一个示例项目,展示了如何在应用中集成并使用ViewPager。下面我们将详细探讨ViewPager的相关知识点。 **1. ViewPager的基本概念** ViewPager是Android...

    Android巧用ViewPager实现左右循环滑动图片

    在这个例子中,我们将学习如何利用ViewPager实现一个可以左右循环滑动的图片轮播,同时在底部显示页码指示器。 首先,我们需要在布局文件中添加ViewPager和页码指示器的视图。如上所示的XML布局中,我们有一个包含...

    ViewPager+Fragment实现自动循环滚动

    在Android开发中,`ViewPager`是一个非常常用的组件,它允许用户通过左右滑动来浏览多个页面,通常用于实现Tab切换或者展示多个相似内容的页面。`Fragment`则是Android中的一个模块化组件,它可以独立于Activity存在...

    使用ViewPager实现左右循环滑动及滑动跳转

    【使用ViewPager实现左右循环滑动及滑动跳转】是一个常见的Android开发需求,尤其是在创建轮播图、引导页或者无限滚动界面时。ViewPager是Android SDK中的一个组件,它允许用户在多个视图间进行平滑的左右滑动切换。...

Global site tag (gtag.js) - Google Analytics