PullToRefreshScrollView的使用 +Banner

来源:互联网 发布:使命召唤ol优化差 编辑:程序博客网 时间:2024/06/04 17:43
package com.example.a08yuekao.fragment;import android.graphics.Bitmap;import android.os.AsyncTask;import android.os.Bundle;import android.os.Handler;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.ScrollView;import android.widget.TextView;import com.example.a08yuekao.MyImageLoader;import com.example.a08yuekao.R;import com.example.a08yuekao.Result;import com.google.gson.Gson;import com.handmark.pulltorefresh.library.ILoadingLayout;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshScrollView;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.youth.banner.Banner;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2017/10/23. */public class SyFragment extends Fragment {    //private PullToRefreshListView pull_lv;    private Handler handler = new Handler();    private String str = "";    private List<Result.DataBean.ComicsBean> newslist;    private MyAdapter myAdapter;    private int pageIndex = 1;    private List<String> data = new ArrayList<>();    private Banner bann;    private PullToRefreshScrollView rsv;    private DisplayImageOptions options;    private ListView lv;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.sy, null);        bann = (Banner) view.findViewById(R.id.bann);        lv = (ListView) view.findViewById(R.id.lv);        rsv = (PullToRefreshScrollView) view.findViewById(R.id.refresh_scroll_view);        new MyAsync().execute("http://api.kkmh.com/v1/daily/comic_lists/0?since=" + pageIndex + "&gender=" + pageIndex + "&sa_event=eyJwcm9qZWN0Ijoia3VhaWthbl9hcHAiLCJ0aW1lIjoxNDg3NzQyMjQwNjE1LCJwcm9wZXJ0aWVzIjp7IkhvbWVwYWdlVGFiTmFtZSI6IueDremXqCIsIlZDb21tdW5pdHlUYWJOYW1lIjoi54Ot6ZeoIiwiJG9zX3ZlcnNpb24iOiI0LjQuMiIsIkdlbmRlclR5cGUiOiLlpbPniYgiLCJGcm9tSG9tZXBhZ2VUYWJOYW1lIjoi54Ot6ZeoIiwiJGxpYl92ZXJzaW9uIjoiMS42LjEzIiwiJG5ldHdvcmtfdHlwZSI6IldJRkkiLCIkd2lmaSI6dHJ1ZSwiJG1hbnVmYWN0dXJlciI6ImJpZ25veCIsIkZyb21Ib21lcGFnZVVwZGF0ZURhdGUiOjAsIiRzY3JlZW5faGVpZ2h0IjoxMjgwLCJIb21lcGFnZVVwZGF0ZURhdGUiOjAsIlByb3BlcnR5RXZlbnQiOiJSZWFkSG9tZVBhZ2UiLCJGaW5kVGFiTmFtZSI6IuaOqOiNkCIsImFidGVzdF9ncm91cCI6MTEsIiRzY3JlZW5fd2lkdGgiOjcyMCwiJG9zIjoiQW5kcm9pZCIsIlRyaWdnZXJQYWdlIjoiSG9tZVBhZ2UiLCIkY2FycmllciI6IkNoaW5hIE1vYmlsZSIsIiRtb2RlbCI6IlZQaG9uZSIsIiRhcHBfdmVyc2lvbiI6IjMuNi4yIn0sInR5cGUiOiJ0cmFjayIsImRpc3RpbmN0X2lkIjoiQTo2YWRkYzdhZTQ1MjUwMzY1Iiwib3JpZ2luYWxfaWQiOiJBOjZhZGRjN2FlNDUyNTAzNjUiLCJldmVudCI6IlJlYWRIb21lUGFnZSJ9");        options = new DisplayImageOptions.Builder()                .cacheInMemory(true)//进行内存缓存                .cacheOnDisk(true)//进行sd卡缓存                /*.showImageOnLoading(R.drawable.ic_stub) // 设置正在下载中的图片                .showImageForEmptyUri(R.drawable.ic_empty) //没有请求地址时                .showImageOnFail(R.drawable.ic_error)//下载错误时*/                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片质量                .build();        initLV();        return view;    }    private void initLV() {        //1.设置模式        rsv.setMode(PullToRefreshBase.Mode.BOTH);        //2.通过调用getLoadingLayoutProxy方法,设置下拉刷新状况布局中显示的文字 ,第一个参数为true,代表下拉刷新        ILoadingLayout headLables = rsv.getLoadingLayoutProxy(true, false);        headLables.setPullLabel("下拉刷新");        headLables.setRefreshingLabel("正在刷新");        headLables.setReleaseLabel("松开刷新");        //2.设置上拉加载底部视图中显示的文字,第一个参数为false,代表上拉加载更多        ILoadingLayout footerLables = rsv.getLoadingLayoutProxy(false, true);        footerLables.setPullLabel("上拉加载");        footerLables.setRefreshingLabel("正在载入...");        footerLables.setReleaseLabel("松开加载更多");        //3.设置监听事件        rsv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {            @Override            public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {                addToTop();//请求网络数据,并更新listview组件                refreshComplete();//数据加载完成后,关闭header,footer            }            @Override            public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {                addToBottom();//请求网络数据,并更新listview组件                refreshComplete();//数据加载完成后,关闭header,footer            }        });    }    /**     * 刷新完成时关闭     */    private void addToBottom() {        pageIndex++;        new MyAsync().execute("http://api.kkmh.com/v1/daily/comic_lists/0?since="+pageIndex+"&gender=0&sa_event=eyJwcm9qZWN0Ijoia3VhaWthbl9hcHAiLCJ0aW1lIjoxNDg3NzQyMjQwNjE1LCJwcm9wZXJ0aWVzIjp7IkhvbWVwYWdlVGFiTmFtZSI6IueDremXqCIsIlZDb21tdW5pdHlUYWJOYW1lIjoi54Ot6ZeoIiwiJG9zX3ZlcnNpb24iOiI0LjQuMiIsIkdlbmRlclR5cGUiOiLlpbPniYgiLCJGcm9tSG9tZXBhZ2VUYWJOYW1lIjoi54Ot6ZeoIiwiJGxpYl92ZXJzaW9uIjoiMS42LjEzIiwiJG5ldHdvcmtfdHlwZSI6IldJRkkiLCIkd2lmaSI6dHJ1ZSwiJG1hbnVmYWN0dXJlciI6ImJpZ25veCIsIkZyb21Ib21lcGFnZVVwZGF0ZURhdGUiOjAsIiRzY3JlZW5faGVpZ2h0IjoxMjgwLCJIb21lcGFnZVVwZGF0ZURhdGUiOjAsIlByb3BlcnR5RXZlbnQiOiJSZWFkSG9tZVBhZ2UiLCJGaW5kVGFiTmFtZSI6IuaOqOiNkCIsImFidGVzdF9ncm91cCI6MTEsIiRzY3JlZW5fd2lkdGgiOjcyMCwiJG9zIjoiQW5kcm9pZCIsIlRyaWdnZXJQYWdlIjoiSG9tZVBhZ2UiLCIkY2FycmllciI6IkNoaW5hIE1vYmlsZSIsIiRtb2RlbCI6IlZQaG9uZSIsIiRhcHBfdmVyc2lvbiI6IjMuNi4yIn0sInR5cGUiOiJ0cmFjayIsImRpc3RpbmN0X2lkIjoiQTo2YWRkYzdhZTQ1MjUwMzY1Iiwib3JpZ2luYWxfaWQiOiJBOjZhZGRjN2FlNDUyNTAzNjUiLCJldmVudCI6IlJlYWRIb21lUGFnZSJ9");    }    public void refreshComplete() {        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                rsv.onRefreshComplete();            }        }, 1000);    }    private void addToTop() {        pageIndex--;        new MyAsync().execute("http://api.kkmh.com/v1/daily/comic_lists/0?since="+pageIndex+"&gender=0&sa_event=eyJwcm9qZWN0Ijoia3VhaWthbl9hcHAiLCJ0aW1lIjoxNDg3NzQyMjQwNjE1LCJwcm9wZXJ0aWVzIjp7IkhvbWVwYWdlVGFiTmFtZSI6IueDremXqCIsIlZDb21tdW5pdHlUYWJOYW1lIjoi54Ot6ZeoIiwiJG9zX3ZlcnNpb24iOiI0LjQuMiIsIkdlbmRlclR5cGUiOiLlpbPniYgiLCJGcm9tSG9tZXBhZ2VUYWJOYW1lIjoi54Ot6ZeoIiwiJGxpYl92ZXJzaW9uIjoiMS42LjEzIiwiJG5ldHdvcmtfdHlwZSI6IldJRkkiLCIkd2lmaSI6dHJ1ZSwiJG1hbnVmYWN0dXJlciI6ImJpZ25veCIsIkZyb21Ib21lcGFnZVVwZGF0ZURhdGUiOjAsIiRzY3JlZW5faGVpZ2h0IjoxMjgwLCJIb21lcGFnZVVwZGF0ZURhdGUiOjAsIlByb3BlcnR5RXZlbnQiOiJSZWFkSG9tZVBhZ2UiLCJGaW5kVGFiTmFtZSI6IuaOqOiNkCIsImFidGVzdF9ncm91cCI6MTEsIiRzY3JlZW5fd2lkdGgiOjcyMCwiJG9zIjoiQW5kcm9pZCIsIlRyaWdnZXJQYWdlIjoiSG9tZVBhZ2UiLCIkY2FycmllciI6IkNoaW5hIE1vYmlsZSIsIiRtb2RlbCI6IlZQaG9uZSIsIiRhcHBfdmVyc2lvbiI6IjMuNi4yIn0sInR5cGUiOiJ0cmFjayIsImRpc3RpbmN0X2lkIjoiQTo2YWRkYzdhZTQ1MjUwMzY1Iiwib3JpZ2luYWxfaWQiOiJBOjZhZGRjN2FlNDUyNTAzNjUiLCJldmVudCI6IlJlYWRIb21lUGFnZSJ9");    }    class MyAsync extends AsyncTask<String, Void, String> {        @Override        protected String doInBackground(String... params) {            //创建Url对象            try {                URL url = new URL(params[0]);                //打开连接                HttpURLConnection connection = (HttpURLConnection) url.openConnection();                //设置                connection.setRequestMethod("GET");                connection.setReadTimeout(3000);                connection.setConnectTimeout(3000);                int code = connection.getResponseCode();                if (code == 200) {                    InputStream inputStream = connection.getInputStream();                    str = streamToString(inputStream);                }            } catch (Exception e) {                e.printStackTrace();            }            return str;        }        @Override        protected void onPostExecute(String s) {            super.onPostExecute(s);            Log.e("ZZZ", s + "11111111111111111");            //解析数据            Gson gson = new Gson();            Result result = gson.fromJson(str, Result.class);            newslist = result.getData().getComics();            for (int i=0;i<newslist.size();i++){                data.add(newslist.get(i).getCover_image_url());            }            //设置banner样式            // banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE);            //设置图片加载器            bann.setImageLoader(new MyImageLoader());            //设置图片集合            bann.setImages(data);            //设置banner动画效果            //banner.setBannerAnimation(Transformer.RotateDown);            //设置标题集合(当banner样式有显示title时)            //banner.setBannerTitles(imageTitle);            //设置轮播时间            bann.setDelayTime(1500);            //设置指示器位置(当banner模式中有指示器时)            //banner.setIndicatorGravity(BannerConfig.CENTER);            //banner设置方法全部调用完毕时最后调用            bann.start();            setAdapter();        }    }    private void setAdapter() {        if (myAdapter == null) {            myAdapter = new MyAdapter();            lv.setAdapter(myAdapter);        } else {            myAdapter.notifyDataSetChanged();        }    }    public String streamToString(InputStream is) {        StringBuilder sb = new StringBuilder();        String con;        BufferedReader br = new BufferedReader(new InputStreamReader(is));        try {            while ((con = br.readLine()) != null) {                sb.append(con);            }        } catch (IOException e) {// TODO Auto-generated catch block            e.printStackTrace();        }        return sb.toString();    }    class MyAdapter extends BaseAdapter {        @Override        public int getCount() {            return newslist.size();        }        @Override        public Object getItem(int position) {            return newslist.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            View view = View.inflate(getActivity(), R.layout.item, null);            ImageView img = (ImageView) view.findViewById(R.id.img);            TextView tv = (TextView) view.findViewById(R.id.tv);            ImageLoader.getInstance().displayImage(newslist.get(position).getCover_image_url(), img, options);            tv.setText(newslist.get(position).getTitle());            return view;        }    }}
//自定义View继承ListView 解决与Banner的冲突问题
package com.example.a08yuekao;import android.content.Context;import android.util.AttributeSet;import android.widget.ListView;/** * Created by Administrator on 2017/10/24. */public class Zdy extends ListView {    public Zdy(Context context) {        super(context);    }    public Zdy(Context context, AttributeSet attrs) {        super(context, attrs);    }    public Zdy(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,                MeasureSpec.AT_MOST);        super.onMeasure(widthMeasureSpec, expandSpec);    }}
布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:ptr="http://schemas.android.com/apk/res-auto"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <com.handmark.pulltorefresh.library.PullToRefreshScrollView        android:id="@+id/refresh_scroll_view"        android:layout_width="match_parent"        android:layout_height="match_parent"        ptr:ptrAnimationStyle="flip"        ptr:ptrDrawable="@drawable/default_ptr_flip"        ptr:ptrHeaderBackground="#383838"        ptr:ptrHeaderTextColor="#FFFFFF">        <!--在scrollView中添加组件 viewPager和ListView            注意:在scrollView中只能有一个子孩子-->        <LinearLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:orientation="vertical"            >            <com.youth.banner.Banner                android:layout_width="match_parent"                android:layout_height="200dp"                android:id="@+id/bann"                ></com.youth.banner.Banner>            <com.example.a08yuekao.Zdy                android:layout_width="match_parent"                android:layout_height="match_parent"                android:id="@+id/lv"                ></com.example.a08yuekao.Zdy>        </LinearLayout>    </com.handmark.pulltorefresh.library.PullToRefreshScrollView></LinearLayout>