• 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
    
    
    左滑动图片,
  • 相关阅读:
    Map1: iOS开发中定位和地图介绍
    GCD11: 创建计时器
    GCD10: 用GCD构建自己的分派队列
    GCD9: 用GCD将任务分组
    GCD8: 在GCD上让一个任务最多执行一次
    GCD7: 利用GCD延时后执行任务
    GCD6: 在GCD上异步执行非UI相关任务
    GCD5: 用GCD同步执行非UI相关的任务
    回文数
    字符串置换
  • 原文地址:https://www.cnblogs.com/zx-blog/p/11836411.html
Copyright © 2020-2023  润新知