android怎么viewpager实现循环切换图片

如题所述

Android中的ViewPager则实现了左右滑动的效果,ViewPager类提供了多界面切换的新效果。利用ViewPager实现图片循环滚动代码如下:

1、首先是布局文件,使用了一个ViewPager控件:       
      

<span style="padding: 0px; margin: 0px; font-size: 14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </android.support.v4.view.ViewPager>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/viewpager"
        android:background="#33000000"
        android:orientation="vertical"
        android:padding="5dip" >
        <TextView
            android:id="@+id/tv_image_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="第一个引导页面"
            android:textColor="@android:color/white"
            android:textSize="14sp" />
        <LinearLayout
            android:id="@+id/ll_points"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dip"
            android:layout_gravity="center_horizontal"
            android:orientation="horizontal" >
        </LinearLayout>
    </LinearLayout>
</RelativeLayout></span>

2、接下来实现一个继承PagerAdapter的MyAdapter类,实现一个PagerAdapter,代码如下:

<span style="padding: 0px; margin: 0px; font-size: 14px;">package com.example.viewpagertest;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
class ViewPagerAdapter extends PagerAdapter {
    private List<ImageView> mImageViewList;
    public ViewPagerAdapter(List<ImageView> imageViewList) {
        super();
        this.mImageViewList = imageViewList;
    }
    /**
     * è¯¥æ–¹æ³•å°†è¿”回所包含的 Item总个数。为了实现一种循环滚动的效果,返回了基本整型的最大值,这样就会创建很多的Item,
     * å…¶å®žè¿™å¹¶éžæ˜¯çœŸæ­£çš„无限循环。
     */
    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }
         /**
     * åˆ¤æ–­å‡ºåŽ»çš„view是否等于进来的view å¦‚果为true直接复用
     */
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }
    /**
     * é”€æ¯é¢„加载以外的view对象, ä¼šæŠŠéœ€è¦é”€æ¯çš„对象的索引位置传进来,就是position,
     * å› ä¸ºmImageViewList只有五条数据,而position将会取到很大的值,
     * æ‰€ä»¥ä½¿ç”¨å–余数的方法来获取每一条数据项。
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(mImageViewList.get(position % mImageViewList.size()));
    }
    /**
     * åˆ›å»ºä¸€ä¸ªview,
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(mImageViewList.get(position % mImageViewList.size()));
        return mImageViewList.get(position % mImageViewList.size());
    }
}
</span>

3、最后是主界面部分的代码:

<span style="padding: 0px; margin: 0px; font-size: 14px;">package com.example.viewpagertest;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

public class MainActivity extends Activity implements OnPageChangeListener {

    private List<ImageView> imageViewList;
    private TextView tvDescription;
    private LinearLayout llPoints;
    private String[] imageDescriptions;
    private int previousSelectPosition = 0;
    private ViewPager mViewPager;
    private boolean isLoop = true;
    private Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setView();
        initView();
    }

    public void setView() {
        setContentView(R.layout.activity_splash_viewpager);

        // è‡ªåŠ¨åˆ‡æ¢é¡µé¢åŠŸèƒ½
        new Thread(new Runnable() {

            @Override
            public void run() {
                while (isLoop) {
                    SystemClock.sleep(2000);
                    handler.sendEmptyMessage(0);
                }
            }
        }).start();
    }

    public void initView() {
        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        tvDescription = (TextView) findViewById(R.id.tv_image_description);
        llPoints = (LinearLayout) findViewById(R.id.ll_points);
        
        prepareData();
        
        ViewPagerAdapter adapter = new ViewPagerAdapter(imageViewList);
        mViewPager.setAdapter(adapter);
        mViewPager.setOnPageChangeListener(this);
        
        tvDescription.setText(imageDescriptions[previousSelectPosition]);
        llPoints.getChildAt(previousSelectPosition).setEnabled(true);
        
        /**
         * 2147483647 / 2 = 1073741820 - 1 
         * è®¾ç½®ViewPager的当前项为一个比较大的数,以便一开始就可以左右循环滑动
         */
        int n = Integer.MAX_VALUE / 2 % imageViewList.size();
        int itemPosition = Integer.MAX_VALUE / 2 - n;
        
        mViewPager.setCurrentItem(itemPosition);
    }
    
     private void prepareData() {
            imageViewList = new ArrayList<ImageView>();
            int[] imageResIDs = getImageResIDs();
            imageDescriptions = getImageDescription();
            
            ImageView iv;
            View view;
            for (int i = 0; i < imageResIDs.length; i++) {
                iv = new ImageView(this);
                iv.setBackgroundResource(imageResIDs[i]);
                imageViewList.add(iv);
                
                // æ·»åŠ ç‚¹view对象
                view = new View(this);
                view.setBackgroundDrawable(getResources().getDrawable(R.drawable.point_background));
                LayoutParams lp = new LayoutParams(5, 5);
                lp.leftMargin = 10;
                view.setLayoutParams(lp);
                view.setEnabled(false);
                llPoints.addView(view);
            }
        }
        
        private int[] getImageResIDs() {
            return new int[]{
                    R.drawable.bg1,
                    R.drawable.bg2,
                    R.drawable.bg3,
                    R.drawable.pic_01,
                    R.drawable.pic_02
            };
        }
        
        private String[] getImageDescription() {
            return new String[]{
                    "第一个引导页面",
                    "第二个引导页面",
                    "第三个引导页面",
                    "第四个引导页面",
                    "第五个引导页面"
            };
        }
        @Override
        public void onPageScrollStateChanged(int arg0) {
            
        }
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            
        }
        @Override
        public void onPageSelected(int position) {
            // æ”¹å˜å›¾ç‰‡çš„描述信息
            tvDescription.setText(imageDescriptions[position % imageViewList.size()]);
            // åˆ‡æ¢é€‰ä¸­çš„点,把前一个点置为normal状态
            llPoints.getChildAt(previousSelectPosition).setEnabled(false);
            // æŠŠå½“前选中的position对应的点置为enabled状态
            llPoints.getChildAt(position % imageViewList.size()).setEnabled(true);
            previousSelectPosition = position  % imageViewList.size();
        }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        isLoop = false;
    }
}
</span>
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-29
ViewPager是android-support-v4.jar包中的一个系统控件,继承自ViewGroup,专门用以实现左右滑动切换View的效果,使用时需要首先在Project->properties->Java Build Path->Libraries->Add External Jars中加入sdk目录下的extras/android/support/v4/android-support-v4.jar(如果找不到,则需要用sdk manager下载android support package)。加入这个jar包之后就可以使用ViewPager类了。本回答被提问者和网友采纳