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);
      }
    }
  } 

} 

源码下载:左右滑动ViewPager

2、上面的代码中,当只有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软件编程有所帮助。

(0)

相关推荐

  • Android中ViewPager组件的基本用法及实现图片切换的示例

    ViewPager是android-support-v4.jar包里的组件.在布局文件里标签需要连包名一起 写全称<android.support.v4.view.ViewPager /> 基本用法 ViewPager的基本用法我概括为三步 第一步 在主布局文件里放一个ViewPager组件 第二步 为每个页面建立布局文件,把界面写好 第三步 在主Activity里获取ViewPager组件,并为它设定Adapter. Adapter详细讲讲,ViewPager对应的Adapter继承自Pag

  • Android开发之使用ViewPager实现图片左右滑动切换效果

    Android中图片的左右切换随处可见,今天我也试着查阅资料试着做了一下,挺简单的一个小Demo,却也发现了一些问题,话不多说,上代码~: 使用了3个xml文件作为ViewPager的滑动page,布局都是相同的,如下只展示其中之一: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/

  • Android ViewPager实现图片轮播效果

    在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设置为当前item的position+1即可.先来看看效果图吧: 就是实现这样的一个轮播广告的效果. 因为这个是自己为了练习仿照某旅游类App做的,所以这里的数据是使用抓包工具抓取的,准备数据等工作就不在这里赘述了,反正数据的添加大体都是相同的.我的思路是这样的,从网络上实时的获取数据(当然你也可以将数据写死),然后通过网络

  • android 解决ViewPager加载大量图片内存溢出问题

    1.大家都知道为ViewPager构建适配器继承PagerAdapter,怎么构建就不说了.Viewpager会默认加载当前页和当前页的左右两页.一开始当前页是下标0,所以一开始默认加载第0页(指下标,下同)和第1页.当你向右滑动,当前页为第1页时,ViewPager会加载第2页,这时一共有3页存在(第0,1,2页).再向右滑动,当前页为第2页时,会移除第0页,加载第3页,同理向左滑动当前页为第1页时,会移除第3页.这么说应该懂了吧. 知道了上面的原理,就可以让ViewPager始终只加载3页的

  • Android 利用ViewPager实现图片可以左右循环滑动效果附代码下载

    首先给大家展示靓照,对效果图感兴趣的朋友可以继续往下阅读哦. ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,上面是效果图,用美女图片是我一贯的作风,呵呵  1.    首先看一些layout下的xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=&qu

  • Android使用ViewPager实现图片滑动预览效果

    本文为大家分享了Android ViewPager实现图片滑动预览效果展示的具体代码,供大家参考,具体内容如下 效果图: 滑动前: 滑动后: 代码非常简单,实现起来很容易 xml代码: <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/ap

  • Android 使用ViewPager实现图片左右循环滑动自动播放

    ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵 1. 首先看一些layout下的xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_

  • Android画廊效果之ViewPager显示多个图片

    首先来看下ViewPager显示多个图片效果: 从上面的图片可以看到,当添加多张图片的时候,能够在下方形成一个画廊的效果,我们左右拉动图片来看我们添加进去的图片,效果是不是好了很多呢?下面来看看怎么实现吧! 上面的效果类似Android里面ViewPage的效果,但是跟ViewPager有所不同,ViewPager每次只能显示一张图片. 其实我们是利用到了View的clipChildren属性,我们在这里要把ViewPager以及它的父窗体都设置为false,如下: android:clipCh

  • Android使用ViewPager加载图片和轮播视频

    作为Android基础组件之一,大家对viewpager已经很熟悉了,网上也有很多使用viewpager来加载图片的案例.但是像微信那样点击图片,可以轮播显示图片和视频的例子却没找到.正巧项目中有需求,可以就花时间写了下,现在给一下核心代码,希望对有此需求的同学们起一个抛砖引玉的作用.话不多说了,上代码: 以下是initData的代码 public void initData() { //把聊天界面的图片和视频找出来,并加到数组中,并在 //并根据传进来的position来找到视频或图片在数组中

  • Android自定义ViewPager实现个性化的图片切换效果

    第一次见到ViewPager这个控件,瞬间爱不释手,做东西的主界面通通ViewPager,以及图片切换也抛弃了ImageSwitch之类的,开始让ViewPager来做.时间长了,ViewPager的切换效果觉得枯燥,形成了审美疲劳~~我们需要改变,今天教大家如何改变ViewPager切换时的效果,实现个性化的图片切换 看一下这样效果的图片切换: 是不是比传统的效果个性很多,嘿嘿~~其实很简单,学习完这篇文章,保证你可以自定义切换效果,做出各式各样的效果. 1.制作前的分析 观察下效果图,实际上

随机推荐