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

<!-- 滑动图片布局文件 -->
<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/vpSlideImg"
        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/llSlideImg"
            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>

/**
 * Copyright(C) 2014 Beijing Oradt Ltd. 
 * For Digital Visiting Card 1.0 File
 * Name:SlideImageActivity.java 
 * Description:左右滑动图片 
 * Author: Xiao JinLai
 * Date:2014-12-18上午11:46:56 
 * History: Date: Author: Depiction:
 */
public class SlideImageActivity extends Activity implements
        OnPageChangeListener {

    /**
     * ViewPager
     */
    private ViewPager mViewPager;

    /**
     * 装点点的ImageView数组
     */
    private ImageView[] mTips;

    /**
     * 装ImageView数组
     */
    private ImageView[] mImageViews;

    /**
     * 图片资源id
     */
    private int[] mImgIdArray;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        initControl(); // 加载控件

    }

    /**
     * 加载控件
     */
    private void initControl() {

        setContentView(R.layout.activity_slide_img);

        ViewGroup tViewGroup = (ViewGroup) findViewById(R.id.llSlideImg);
        mViewPager = (ViewPager) findViewById(R.id.vpSlideImg);

        // 载入图片资源ID
        mImgIdArray = 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中
        mTips = new ImageView[mImgIdArray.length];

        for (int i = 0; i < mTips.length; i++) {

            ImageView imageView = new ImageView(this);

            imageView.setLayoutParams(new LayoutParams(10, 10));

            mTips[i] = imageView;

            if (i == 0) {

                mTips[i].setBackgroundResource(R.drawable.page_indicator_focused);
            } else {

                mTips[i].setBackgroundResource(R.drawable.page_indicator_unfocused);
            }

            tViewGroup.addView(imageView);
        }

        // 将图片装载到数组中
        mImageViews = new ImageView[mImgIdArray.length];

        for (int i = 0; i < mImageViews.length; i++) {

            ImageView imageView = new ImageView(this);
            mImageViews[i] = imageView;
            imageView.setBackgroundResource(mImgIdArray[i]);
        }

        // 设置Adapter
        mViewPager.setAdapter(new SlideImgAdapter(mImageViews));

        // 设置监听,主要是设置点点的背景
        mViewPager.setOnPageChangeListener(this);

        // 设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动
        // mViewPager.setCurrentItem((mImageViews.length) * 100);
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {

    }

    @Override
    public void onPageSelected(int arg0) {

        setImageBackground(arg0);
    }

    /**
     * 设置选中的tip的背景
     * 
     * @param selectItems
     */
    private void setImageBackground(int selectItems) {

        for (int i = 0; i < mTips.length; i++) {

            if (i == selectItems) {

                mTips[i].setBackgroundResource(R.drawable.page_indicator_focused);
            } else {

                mTips[i].setBackgroundResource(R.drawable.page_indicator_unfocused);
            }
        }
    }
}

/**
 * Copyright(C) 2014 Beijing Oradt Ltd. 
 * For Digital Visiting Card 1.0 File
 * Name:SlideImgAdapter.java 
 * Description:滑动图片适配器 
 * Author: Xiao JinLai
 * Date:2014-12-19上午10:57:51 
 * History: Date: Author: Depiction:
 */
public class SlideImgAdapter extends PagerAdapter {

    private ImageView[] mImageViews;

    public SlideImgAdapter(ImageView[] imageViews) {

        this.mImageViews = imageViews;
    }

    /**
     * 返回可用的视图的总数
     */
    @Override
    public int getCount() {

        return mImageViews.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {

        return view == object;
    }

    /**
     * PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁 View:是
     * instantiateItem 中已添加的 view position:0 object:是 ViewGroup view
     * 子View的第 0 个元素。
     */
    @Override
    public void destroyItem(ViewGroup view, int position, Object object) {

        view.removeView(mImageViews[position]);

    }

    /**
     * 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化, 我们将要显示的 ImageView 加入到 ViewGroup
     * 中,然后作为返回值返回即可
     */
    @Override
    public Object instantiateItem(ViewGroup view, int position) {

        view.addView(mImageViews[position]);

        return mImageViews[position];
    }
}

接着看看,程序运行后在 SlideImgAdapter 中运行的状态。
先走 getCount

然后 instantiateItem(ViewGroup view, int position) 
在 view 中添加了两个View后,又回到 getCount

接着 isViewFromObject(View view, Object object)
我看到的 view 与 object 的 Id 一样,说明是一个对象。并同为 ImageView ,返回值是 true

还是走 isViewFromObject(View view, Object object) 
这时我看到的 view 与 object 的 Id 不一样了,说明不是一个对象,但同为 ImageView ,返回值是 false

还是走 isViewFromObject(View view, Object object) 
我看到的 view 与 object 的 Id 一样:830016405576,说明是一个对象。并同为 ImageView ,返回值是 true


还是走 isViewFromObject(View view, Object object) 
我看到的 view 与 object 的 Id 一样:830018479360,说明是一个对象。并同为 ImageView ,返回值是 true


还是走 isViewFromObject(View view, Object object) 
这时我看到的 view 与 object 的 Id 不一样了,
view(Id):830016405576
object(Id):830018479360
说明不是一个对象,但同为 ImageView ,返回值是 false


还是走 isViewFromObject(View view, Object object) 
我看到的 view 与 object 的 Id 一样:830016405576,说明是一个对象。并同为 ImageView ,返回值是 true


还是走 isViewFromObject(View view, Object object) 
我看到的 view 与 object 的 Id 一样:830018479360,说明是一个对象。并同为 ImageView ,返回值是 true


还是走 isViewFromObject(View view, Object object) 
这时我看到的 view 与 object 的 Id 不一样了,
view(Id):830016405576
object(Id):830018479360
说明不是一个对象,但同为 ImageView ,返回值是 false

还是走 isViewFromObject(View view, Object object) 
我看到的 view 与 object 的 Id 一样:830016405576,说明是一个对象。并同为 ImageView ,返回值是 true


左滑动图片,

猜你喜欢

转载自www.cnblogs.com/zx-blog/p/11836411.html