无限轮播

来源:互联网 发布:mac bootcamp磁盘权限 编辑:程序博客网 时间:2024/06/05 09:55
package com.viewpager_lunbo.adapter;import android.content.Context;import android.os.Handler;import android.support.v4.view.PagerAdapter;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import com.nostra13.universalimageloader.core.ImageLoader;import com.viewpager_lunbo.bean.AllContent;import com.viewpager_lunbo.util.ImageLoaderUtil;import java.util.List;/** * Created by 李欣 on 2017/10/14. */public class MyPagerAdapter extends PagerAdapter {    Context ct;    List<AllContent.DataBean> list;    Handler handler;    public MyPagerAdapter(Context ct, List<AllContent.DataBean> list, Handler handler) {        this.ct = ct;        this.list = list;        this.handler = handler;    }    @Override    public int getCount() {        return Integer.MAX_VALUE;    }    @Override    public boolean isViewFromObject(View view, Object object) {        return view == object;    }    @Override    public Object instantiateItem(ViewGroup container, int position) {        ImageView imageView = new ImageView(ct);        //设置图片平铺整个控件        imageView.setScaleType(ImageView.ScaleType.FIT_XY);        //使用网络获取的图片position%list.size()将position控制在集合长度之内        ImageLoader.getInstance().displayImage(list.get(position%list.size()).getImg(),imageView, ImageLoaderUtil.getdefaultoption());        //设置触摸事件        imageView.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View view, MotionEvent motionEvent) {                int action = motionEvent.getAction();//获取手指的动作                switch (action){                    case MotionEvent.ACTION_DOWN://按下时                        handler.removeCallbacksAndMessages(null);//取消发送消息                        break;                    case MotionEvent.ACTION_MOVE://移动时                        handler.removeCallbacksAndMessages(null);//取消发送消息                        break;                    case MotionEvent.ACTION_UP://抬起时                        handler.sendEmptyMessageDelayed(0,2000);//继续发送                        //handler.removeCallbacksAndMessages(null);                        break;                    case MotionEvent.ACTION_CANCEL://取消触摸                        handler.sendEmptyMessageDelayed(0,2000);//继续发送                        break;                }                return true;//返回true代表要自己处理            }        });        //将图片添加到容器中        container.addView(imageView);        return imageView;    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        //移除        container.removeView((View) object);    }

}

package com.viewpager_lunbo;import android.os.AsyncTask;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.ImageView;import android.widget.LinearLayout;import com.google.gson.Gson;import com.viewpager_lunbo.adapter.MyPagerAdapter;import com.viewpager_lunbo.bean.AllContent;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity{    private ViewPager vp;    private LinearLayout linear_layout;    private MyPagerAdapter adapter;    private List<AllContent.DataBean> list;    private List<ImageView> images;    Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if(msg.what == 0){                vp.setCurrentItem(vp.getCurrentItem()+1);//下一张                //发送延迟                handler.sendEmptyMessageDelayed(0,2000);            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        vp = (ViewPager) findViewById(R.id.vp);        linear_layout = (LinearLayout) findViewById(R.id.linear_layout);        getData();    }    private void getData() {        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {            @Override            protected String doInBackground(Void... voids) {                try {                    String path = "http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1";                    URL url = new URL(path);                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();                    urlConnection.setRequestMethod("GET");                    urlConnection.setReadTimeout(5000);                    urlConnection.setConnectTimeout(5000);                    int responseCode = urlConnection.getResponseCode();                    if (responseCode == 200) {                        InputStream inputStream = urlConnection.getInputStream();                        String json = streamToString(inputStream, "utf-8");                        return json;                    }                } catch (Exception e) {                    e.printStackTrace();                }                return null;            }            @Override            protected void onPostExecute(String s) {                super.onPostExecute(s);                //Toast.makeText(MainActivity.this,"++++"+s,Toast.LENGTH_SHORT).show();                Log.d("++++++++++",s);                Gson gson = new Gson();                AllContent allcontent = gson.fromJson(s, AllContent.class);                list = allcontent.getData();                setadapter();                initdiandian(list);                //设置手动无限滑动                //vp.setCurrentItem(Integer.MAX_VALUE/2);                //设置隔两秒钟自动轮播                handler.sendEmptyMessageDelayed(0,2000);                //改变图片颜色                vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {                    @Override                    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                    }                    @Override                    public void onPageSelected(int position) {                        //根据下标改变图片的颜色                        for(int i=0;i<images.size();i++){                            //判断当前点击的是哪一个图片                            if(i == position%images.size()){                                ImageView imageView = images.get(i);                                imageView.setImageResource(R.drawable.img_shape_1);                            }else{                                ImageView imageView = images.get(i);                                imageView.setImageResource(R.drawable.img_shape_2);                            }                        }                    }                    @Override                    public void onPageScrollStateChanged(int state) {                    }                });            }        };        asyncTask.execute();    }    //设置点点    private void initdiandian(List<AllContent.DataBean> list) {        //创建一个集合用力储存点点        images = new ArrayList<>();        //清空linear_layout        linear_layout.removeAllViews();        for (int i = 0;i<5;i++){            //集合中的图片数量创建图片控件            ImageView imageView = new ImageView(this);            if(i == 0){                imageView.setImageResource(R.drawable.img_shape_1);            }else{                imageView.setImageResource(R.drawable.img_shape_2);            }            //将设置好图片的控件添加到集合中            images.add(imageView);            //将图片添加到linear_layout中显示            linear_layout.addView(imageView);        }    }    private String streamToString(InputStream inputStream, String charset) {        try {            //转换流            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset);            //缓冲字符流            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);            String s = null;            //字符串缓冲区            StringBuilder builder = new StringBuilder();            while ((s = bufferedReader.readLine()) != null) {                builder.append(s);//追加            }            //关闭流            bufferedReader.close();            return builder.toString();        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    private void setadapter() {        if (adapter == null) {            //创建适配器            adapter = new MyPagerAdapter(MainActivity.this,list,handler);            //设置适配器            vp.setAdapter(adapter);        } else {            //刷新适配器            adapter.notifyDataSetChanged();        }    }}


原创粉丝点击