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

 我来答
曹晓山11
2015-07-20 · 知道合伙人互联网行家
曹晓山11
知道合伙人互联网行家
采纳数:3033 获赞数:52066
毕业南阳理工学院计算机科学与技术专业,本科学位。互联网行业从业3年工作经验,读过编程类相关书籍多本。

向TA提问 私信TA
展开全部

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>
我不是他舅
2014-10-29 · TA获得超过138万个赞
知道顶级答主
回答量:29.6万
采纳率:79%
帮助的人:34.4亿
展开全部
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类了。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式