Android Convenient无限轮播

来源:互联网 发布:mac os 清理 编辑:程序博客网 时间:2024/06/07 04:43

        首先还是导依赖包

    compile 'com.bigkoo:convenientbanner:2.0.5'    compile 'com.jwenfeng.pulltorefresh:library:1.0.3'
    compile project(':library')
       主页面布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    xmlns:app="http://schemas.android.com/apk/res-auto">    <com.bigkoo.convenientbanner.ConvenientBanner        xmlns:app="http://schemas.android.com/apk/res-auto"        android:layout_width="match_parent"        android:layout_height="230dp"        android:id="@+id/banner"        android:layout_alignParentTop="true"        app:canLoop="true"       />    <com.handmark.pulltorefresh.library.PullToRefreshListView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/pu_lv"        android:layout_below="@+id/banner">    </com.handmark.pulltorefresh.library.PullToRefreshListView></RelativeLayout>
      ListView的Item布局

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:layout_width="100dp"        android:layout_height="100dp"        android:id="@+id/img"        android:layout_alignParentLeft="true"        android:layout_marginTop="10dp"        android:layout_marginLeft="10dp"        />    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_toRightOf="@id/img"        android:layout_marginTop="30dp"        android:layout_marginLeft="10dp"        android:id="@+id/titles"        android:text="标题"        />    <TextView        android:id="@+id/desc"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_toRightOf="@id/img"        android:layout_below="@id/titles"        android:layout_marginTop="30dp"        android:layout_marginLeft="10dp"        android:text="描述"        />    <TextView        android:id="@+id/times"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_below="@id/titles"        android:layout_marginTop="30dp"        android:layout_marginRight="20dp"        android:text="时间"        /></RelativeLayout>
       网络接口类
package com.example.app6_longbolistview;/** * Created by ZhangTAO on 2017/9/15. */public class Url {    public static String path = "http://api.tianapi.com/apple/?key=c8bb8de75b2287a6c6c390c50afb21e1";}
   主页面代码

package com.example.app6_longbolistview;import android.content.Context;import android.os.AsyncTask;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.ImageView;import android.widget.ListView;import android.widget.Toast;import com.bigkoo.convenientbanner.ConvenientBanner;import com.bigkoo.convenientbanner.holder.CBViewHolderCreator;import com.bigkoo.convenientbanner.holder.Holder;import com.bigkoo.convenientbanner.listener.OnItemClickListener;import com.google.gson.Gson;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshListView;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.List;import Bean.JsonRootBean;import Bean.Newslist;public class MainActivity extends AppCompatActivity implements OnItemClickListener{   //获取控件以及定义变量    private ConvenientBanner banner;    private List<String> alist=new ArrayList<>();    private ImageLoader imageLoader;    private List<Newslist> datas;    private ImageView imageView;    private MyAdapter adapter;    private PullToRefreshListView lvs;    private String page = "&num=";    private int count = 10;    private Handler ler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg.what == 0x12) {                for (int i = 0;i < 6;i++) {                    alist.add(datas.get(i).getPicUrl());                }            }            getinit();            if (msg.what == 0x11) {                adapter.setDatas(datas);                adapter.notifyDataSetChanged();                lvs.onRefreshComplete();            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();        //获取异步对象        MyTask task = new MyTask();        //执行异步        task.execute();    }    private void init() {        //获取控件        banner = (ConvenientBanner) findViewById(R.id.banner);        lvs = (PullToRefreshListView) findViewById(R.id.pu_lv);         //初始化图片加载        imageLoader = ImageLoader.getInstance();        imageLoader.init(ImageLoaderConfiguration.createDefault(this));    }    private void getinit() {         //开始自动翻页        banner.setPages(new CBViewHolderCreator<NetWorkLoacl>() {            @Override            public NetWorkLoacl createHolder() {                return new NetWorkLoacl();            }        },alist)                //设置指示器是否可见                .setPointViewVisible(true)                //设置自动切换(同时设置了切换时间间隔)                .startTurning(2000)                //设置两个点图片作为翻页指示器,不设置则没有指示器,可以根据自己需求自行配合自己的指示器,不需要圆点指示器可用不设                .setPageIndicator(new int[]{R.drawable.kong, R.drawable.shi})                //设置指示器的方向(左、中、右)                .setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.ALIGN_PARENT_RIGHT)                //设置点击监听事件                .setOnItemClickListener(this)                //设置手动影响(设置了该项无法手动切换)                .setManualPageable(true);    }    @Override    public void onItemClick(int position) {        Toast.makeText(MainActivity.this,"position:"+position,Toast.LENGTH_SHORT).show();    }    private class NetWorkLoacl implements Holder<String> {        @Override        public View createView(Context context) {             //建立一个ImageView            imageView = new ImageView(context);            imageView.setScaleType(ImageView.ScaleType.FIT_XY);            return imageView;        }        @Override        public void UpdateUI(Context context, int position, String data) {                 //获取路径并图                imageLoader.getInstance().displayImage(data,imageView);        }    }    private boolean getDatamore(final String url) {                boolean flag = true;                       try {                           URL path = new URL(url);                           HttpURLConnection connection = (HttpURLConnection) path.openConnection();                           connection.setRequestMethod("GET");                           connection.setConnectTimeout(5000);                           connection.setReadTimeout(5000);                           int code = connection.getResponseCode();                           if (code == 200) {                               InputStream stream = connection.getInputStream();                               String json = streamToString(stream,"utf-8");//                               Log.d("zzz",json.toString());                               Gson gs = new Gson();                               JsonRootBean fromJson = gs.fromJson(json.toString(), JsonRootBean.class);                               datas = fromJson.getNewslist();//                              Log.d("aaa",datas.toString());                           }else {                               flag = false;                           }                       } catch (MalformedURLException e) {                           e.printStackTrace();                       } catch (IOException e) {                           e.printStackTrace();                       }        return flag;    }    private String streamToString(InputStream input,String charset) {        String con = null;        InputStreamReader inputStreamReader = new InputStreamReader(input);        StringBuilder builder = new StringBuilder();        BufferedReader reader = new BufferedReader(inputStreamReader);        try {            while ((con = reader.readLine()) != null) {                builder.append(con);            }                return builder.toString();        } catch (IOException e) {            e.printStackTrace();        }         return null;    }    class MyTask extends AsyncTask<String,Integer,String> {        @Override        protected String doInBackground(String... strings) {            getDatamore(Url.path+page+count);            return null;        }        @Override        protected void onPostExecute(String s) {            super.onPostExecute(s);            adapter = new MyAdapter(MainActivity.this,datas);            lvs.setAdapter(adapter);            Message message = new Message();            message.what = 0x12;            ler.sendMessage(message);            lvs.setMode(PullToRefreshBase.Mode.BOTH);            lvs.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {                @Override                public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {                    lvs.postDelayed(new Runnable() {                        @Override                        public void run() {                            adapter.notifyDataSetChanged();                            lvs.onRefreshComplete();                        }                    },2000);                }                @Override                public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {                     new Thread(new Runnable() {                         @Override                         public void run() {                            count = count+10;                             getDatamore(Url.path+page+count);                             Log.d("zzz",Url.path+page+count);                             Message message = new Message();                             message.what = 0x11;                             ler.sendMessageDelayed(message,2000);                         }                     }).start();                }            });        }    }}
   设置适配器

package com.example.app6_longbolistview;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.nostra13.universalimageloader.core.ImageLoader;import java.util.List;import Bean.Newslist;/** * Created by ZhangTAO on 2017/9/15. */public class MyAdapter extends BaseAdapter{    Context context;    List<Newslist> datas;    public MyAdapter(Context context, List<Newslist> datas) {        this.context = context;        this.datas = datas;    }    public List<Newslist> getDatas() {        return datas;    }    public void setDatas(List<Newslist> datas) {        this.datas = datas;    }    @Override    public int getCount() {        return datas.size();    }    @Override    public Object getItem(int i) {        return datas.get(i);    }    @Override    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {       ViewHodler hodler = null;        if (view == null) {            view = View.inflate(context, R.layout.xlist_item, null);            hodler = new ViewHodler();            hodler.img = view.findViewById(R.id.img);            hodler.title = view.findViewById(R.id.titles);            hodler.desc = view.findViewById(R.id.desc);            hodler.time = view.findViewById(R.id.times);            view.setTag(hodler);        }else {            hodler = (ViewHodler) view.getTag();        }        ImageLoader.getInstance().displayImage(datas.get(i).getPicUrl(),hodler.img);        hodler.title.setText(datas.get(i).getTitle());        hodler.desc.setText(datas.get(i).getDescription());        hodler.time.setText(datas.get(i).getCtime());        return view;    }    static class ViewHodler {        ImageView img;        TextView title;        TextView desc;        TextView time;    }}