您的位置:首页 > 其它

viewpager+handler无限轮播

2016-03-02 08:44 393 查看

package com.hhhhh.text_wuxianlunbo;



import java.util.ArrayList;

import java.util.List;

import com.hhhhh.text_base.MyPageAdapter;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.support.v4.view.ViewPager;

import android.util.Log;

import android.view.View;

import android.app.Activity;

/**

 * handler+viewpager实现无线轮播

 * 注意,按照正常思路:在适配器里的初始化和卸载的方法都需要按照正常方法加载和卸载进行,因为给的list集合里的条目式最大值

 * 故而,需要一个计算公式   从中间点开始,但是此案例是从默认第一张开始,所以未给此公式

 * 这是计算从中间点左右轮播的计算公式

 * Integer.MAX_VALUE/2-Integer.MAX_VALUE/2%list.size();

 * 此案例加载的是死数据图片,不是网络json数据,请注意。。。

 * @author hl

 */

public class MainActivity extends Activity {



    private ViewPager viewpager;   

    private List<View> list;

    

    

    //使用handler主线程进行自动轮播  

    private Handler handler = new Handler(){  

      public void handleMessage(Message msg) {

          //获取当前条目

          int index = viewpager.getCurrentItem();  

          //向右轮播

          viewpager.setCurrentItem(index+=1);  

          //间隔一秒

          handler.sendEmptyMessageDelayed(2, 2000);  

      };

    };  



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    

        viewpager=(ViewPager) findViewById(R.id.viewpager);

        

        init();

        

        viewpager.setAdapter(new MyPageAdapter(this,list));

        //给主线程handler发送延迟一秒的间隔轮播时间

        handler.sendEmptyMessageDelayed(1,1000);

     

    }



    private List<View> init() {    //设置数据,注意设置自带返回值list可实现循环来回轮播

        list=new ArrayList<View>();

        list.add(View.inflate(this, R.layout.one, null));

        list.add(View.inflate(this, R.layout.two, null));

        list.add(View.inflate(this, R.layout.three,null));

        list.add(View.inflate(this, R.layout.four, null));

        list.add(View.inflate(this, R.layout.five, null));

        list.add(View.inflate(this, R.layout.six, null));

        return list;

      }   



}




package com.hhhhh.text_base;

import java.util.List;

import android.content.Context;

import android.support.v4.view.PagerAdapter;

import android.view.View;

import android.view.ViewGroup;

/**

 * 适配器绑定

 *

 * @author hl

 *

 */

public class MyPageAdapter extends PagerAdapter {

    private List<View> list;

    private Context context;

    

    public MyPageAdapter(Context context,List<View> list) {

        this.list = list;

        this.context=context;

    }

    @Override

    public int getCount() {

        // TODO Auto-generated method stub

        return Integer.MAX_VALUE;

    }

    @Override

    public boolean isViewFromObject(View arg0, Object arg1) {

        // TODO Auto-generated method stub

        return arg0 == arg1;

    }

    @Override

    // 初始化界面布局,默认从左方第一张开始

    public Object instantiateItem(ViewGroup container, int position) {

        View vvv = list.get(position % list.size());

        // 容器初始化添加界面

        container.addView(vvv);

        return vvv;

    }

    @Override

    //此处卸载正常卸载

    public void destroyItem(ViewGroup container, int position, Object object) {

        container.removeView((View) object);

    }

}

布局文件都不在给出,图片自己提供,是死数据。。。

效果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: