无限轮播+GridView

来源:互联网 发布:u盘做linux启动盘 编辑:程序博客网 时间:2024/06/06 02:26

主Activtiy

public class MainActivity extends AppCompatActivity {    ViewPager vp;//用于实现轮播    GridView gv;//    NewsUtils Ns;    bean bn;    List<bean.DataBean.EssayBean> list1;    List<ImageView> list;    LinearLayout  linearLayout;    private List<ImageView> imagesList;    //用于实现无限轮播    private Handler handler = new Handler() {        public void handleMessage(Message msg) {            //获取当前条目            int index = vp.getCurrentItem();            //向右轮播            vp.setCurrentItem(index += 1);            //间隔2秒            handler.sendEmptyMessageDelayed(3, 3000);        }        ;    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        vp = (ViewPager) findViewById(R.id.vp);        gv = (GridView) findViewById(R.id.gv);        linearLayout = (LinearLayout) findViewById(R.id.linear_layout);        bn = new bean();        getBeanByGson();//轮播        getGridViewGson();//GridView        //viewPager页面改变的监听事件        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                //如果选中了这一页,,,当前小圆点红色,,,否则绿色                for (int i = 0; i < imagesList.size(); i++) {                    if (i == position % imagesList.size()) {                        imagesList.get(i).setImageResource(R.drawable.doc_select);                    } else {                        imagesList.get(i).setImageResource(R.drawable.doc_select_no);                    }                }            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }    //轮播图的解析    public void getBeanByGson() {        // 使用该方法得到了一个 Json的字符输入流        new AsyncTask<String, String, String>() {            @Override            protected String doInBackground(String... strings) {                String reader = NewsUtils.getNetDataStr();                return reader;            }            @Override            protected void onPostExecute(String s) {                super.onPostExecute(s);                // 使用Gson把该字符输入流转换成JavaBean                Gson gson = new Gson();                bn = gson.fromJson(s, bean.class);                list = new ArrayList<ImageView>();                list1 = new ArrayList<bean.DataBean.EssayBean>();                list1.addAll(bn.getData().getEssay());                for (int i = 0; i < list1.size(); i++) {                    ImageView imageView = new ImageView(MainActivity.this);                    imageView.setScaleType(ImageView.ScaleType.FIT_XY);                    ImageLoader.getInstance().displayImage(list1.get(i).getAuthor().get(0).getWeb_url(), imageView);                    list.add(imageView);                }                initDoc();                MyPageApdata myPagerAdapter = new MyPageApdata(list);                vp.setAdapter(myPagerAdapter);                handler.sendEmptyMessageDelayed(3, 3000);            }        }.execute();    }    //GridView的适配器    public void getGridViewGson() {        // 使用该方法得到了一个 Json的字符输入流        new AsyncTask<String, String, String>() {            @Override            protected String doInBackground(String... strings) {                String reader = NewsUtils.getNetDataStr();                return reader;            }            @Override            protected void onPostExecute(String s) {                super.onPostExecute(s);                // 使用Gson把该字符输入流转换成JavaBean                Gson gson = new Gson();                bn = gson.fromJson(s, bean.class);                list = new ArrayList<ImageView>();                list1 = new ArrayList<bean.DataBean.EssayBean>();                list1.addAll(bn.getData().getEssay());                for (int i = 0; i < list1.size(); i++) {                    ImageView imageView = new ImageView(MainActivity.this);                    imageView.setScaleType(ImageView.ScaleType.FIT_XY);                    ImageLoader.getInstance().displayImage(list1.get(i).getAuthor().get(0).getWeb_url(), imageView);                    list.add(imageView);                }                GridViewApdate myAdapter = new GridViewApdate(list, MainActivity.this, list1);                gv.setAdapter(myAdapter);            }        }.execute();    }    private void initDoc() {        //首先需要一个集合记录这些小圆点的图片,,,,当页面切换的时候,可以从集合中取出imageView进行显示图片的设置        imagesList = new ArrayList<>();        linearLayout.removeAllViews();//清空/移除所有的view        for (int i = 0; i < list.size(); i++) {            ImageView imageView = new ImageView(MainActivity.this);            if (i == 0) {//显示第一页,,,红的                imageView.setImageResource(R.drawable.doc_select);            } else {//绿的                imageView.setImageResource(R.drawable.doc_select_no);            }            //添加到集合            imagesList.add(imageView);            //加入到线性布局中显示            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);            params.setMargins(5, 0, 5, 0);            linearLayout.addView(imageView, params);  //把小圆点添加到线性集合中        }    }}
数据请求包
public class NewsUtils {        //ListView            public static String getNetDataStr() {                String json = null;                try {                    URL url = new URL(                            "http://v3.wufazhuce.com:8000/api/reading/index/?version=3.5.0&platform=android");                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                    conn.setRequestMethod("GET");                    int code = conn.getResponseCode();                    if (code == 200) {                        InputStream is = conn.getInputStream();                        ByteArrayOutputStream bos = new ByteArrayOutputStream();                        int len = -1;                        byte[] buff = new byte[1024];                        while((len = is.read(buff)) != -1){                            bos.write(buff,0,len);                        }                        json = new String(bos.toByteArray());                    }                } catch (Exception e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                return json;            }}
无限轮播适配器
public class MyPageApdata extends PagerAdapter {    List<ImageView> list = new ArrayList<>();    public MyPageApdata(List<ImageView> list) {        this.list = list;    }    @Override    public int getCount() {        return Integer.MAX_VALUE;//Integer.MAX_VALUE可实现无限轮播    }    @Override    public boolean isViewFromObject(View view, Object object) {        return view == object;//固定的    }    @Override    public Object instantiateItem(ViewGroup container, int position) {        position %= list.size();        container.addView(list.get(position));        return list.get(position);    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        container.removeView((View) object);    }}

GridView适配器
public class GridViewApdate extends BaseAdapter {    List<ImageView> list;    Context context;    List<bean.DataBean.EssayBean>list1;    public GridViewApdate(List<ImageView> list, Context context, List<bean.DataBean.EssayBean> list1) {        this.list = list;        this.context = context;        this.list1 = list1;    }    @Override    public int getCount() {        if (list != null) {            return list.size();        }        return 0;    }    @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return null;    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return 0;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder;        if(convertView == null){            convertView = View.inflate(context, R.layout.gridgiew, null);            holder = new ViewHolder();            holder.tv1_gridview = (TextView) convertView.findViewById(R.id.tv1_gridview);            holder.tv2_gridview = (TextView) convertView.findViewById(R.id.tv2_gridview);            holder.iv_gridview = convertView.findViewById(R.id.iv_gridview);            convertView.setTag(holder);        }else{            holder = (ViewHolder) convertView.getTag();        }        holder.tv1_gridview.setText(list1.get(position).getAuthor().get(0).getSummary());        holder.tv2_gridview.setText(list1.get(position).getAuthor().get(0).getFans_total());        ImageLoader.getInstance().displayImage(list1.get(position).getAuthor().get(0).getWeb_url(),holder.iv_gridview);        return convertView;    }    public void setData(List<ImageView> list){        this.list = list;        notifyDataSetChanged();    }    static class ViewHolder {         ImageView iv_gridview;        TextView tv1_gridview,tv2_gridview;    }}

小圆点需要的配置文件在Drawble
第一个
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">    <solid android:color="#ff0000"/>    <corners android:radius="5dp"/>    <size android:height="10dp" android:width="10dp"/></shape>
第二个

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">    <solid android:color="#00ff00"/>    <corners android:radius="5dp"/>    <size android:height="10dp" android:width="10dp"/></shape>

ImageLode的配置
public class MyApps extends Application {    @Override    public void onCreate() {        super.onCreate();        File file = new File(Environment.getExternalStorageDirectory().getPath()+"Images0718");        ImageLoaderConfiguration conn = new ImageLoaderConfiguration.Builder(this)                .threadPoolSize(5)                .memoryCacheExtraOptions(80, 80)                .memoryCacheSize(2 * 1024 * 1024)                .threadPriority(1000)                .diskCacheFileNameGenerator(new Md5FileNameGenerator())                .diskCacheSize(50 * 1024 * 1024)                .build();        ImageLoader.getInstance().init(conn);    }}

温馨提示小圆点记得加布局文件,ImageLode记得在清单文件中配置,记得加网络权限