轮播图与原点

public class PullToRefreshListViewActivity extends AppCompatActivity {


    public static final String TAG = PullToRefreshListViewActivity.class.getSimpleName();    // log 输出的tag
    private static final int CODE_BANNER_INIT = 1;      // 初始化轮播图数据的what
    private static final int CODE_BANNER_START = 3;     // 开始轮播的what
    private static final int CODE_LIST = 2;             // 列表数据的what
    private PullToRefreshListView listView;             // 展示数据刷新的ListView
    private int pullNum = 1;        // 请求的页码
    /* api */
    private String lunBoUrl = "http://api.iclient.ifeng.com/ClientNews?id=CJ33,FOCUSCJ33,HNCJ33&action=default&pullNum=";
    private String listUrl = "http://api.iclient.ifeng.com/ClientNews?id=CJ33,FOCUSCJ33,HNCJ33&action=default&pullNum=";
    private String listParam = "&uid=864678036850608&devid=864678036850608&proid=ifengnews&vt=5&publishid=6103&screen=1080x1920&df=androidphone&os=android_22&nw=wifi";
    /* 轮播 */
    private BannerViewPager bannerViewPager;     // 轮播ViewPager
    private LinearLayout llPonit;       // 界面上展示小圆点的容器
    private List<ImageView> ivImages = new ArrayList<>();   // 存放小圆点的容器
    private TextView tvNum;     // Banner上指示ViewPager数字的TextView
    private TextView tvTitle;   // Banner上显示标题的TextView
    private BannerAdapter adapter;      // 轮播适配器
    private List<BannerBean.ItemBean> bannerBeans;


    private List<ListBean.ItemBean> listItem = new ArrayList<>();
    private PullListAdapter pullListAdapter = new PullListAdapter(PullToRefreshListViewActivity.this, listItem);


    /* handler 把Thread中的数据展示到界面 */
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {


            switch (msg.what) {
                case CODE_BANNER_INIT:      // 轮播
                    String luBoresult = (String) msg.obj;
                    Log.i(TAG, luBoresult);
                    Gson gson = new Gson();
                    LinkedList<BannerBean> lunBoBeans = gson.fromJson(luBoresult, new TypeToken<LinkedList<BannerBean>>() {
                    }.getType());
                    bannerBeans = lunBoBeans.get(0).getItem();
                    // 添加小圆点
                    for (int i = 0; i < bannerBeans.size(); i++) {
                        ImageView imageView = new ImageView(PullToRefreshListViewActivity.this);
                        imageView.setScaleType(ImageView.ScaleType.FIT_XY);


                        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(40, 40);
                        params.setMargins(20, 10, 20, 10);
                        if (i == 0) {
                            imageView.setImageResource(R.drawable.point_red);
                        } else {
                            imageView.setImageResource(R.drawable.point_gray);
                        }


                        llPonit.addView(imageView, params);
                        ivImages.add(imageView);
                    }
                    // 设置轮播适配器
                    adapter = new BannerAdapter(PullToRefreshListViewActivity.this, bannerBeans, tvTitle, tvNum, ivImages);
                    bannerViewPager.setAdapter(adapter);
                    sendEmptyMessageDelayed(CODE_BANNER_START, 2000);
                    break;
                case CODE_LIST:     // 列表数据
                    if (pullNum == 1) {
                        listItem.clear();
                    }
                    String listResult = (String) msg.obj;
                    Log.i(TAG, listResult);
                    Gson listGson = new Gson();
                    LinkedList<ListBean> listBeans = listGson.fromJson(listResult, new TypeToken<LinkedList<ListBean>>() {
                    }.getType());
                    listItem.addAll(listBeans.get(0).getItem());
                    pullListAdapter.notifyDataSetChanged();
                    listView.onRefreshComplete();
                    break;
                case CODE_BANNER_START:     // 开始轮播
                    int currentItem = bannerViewPager.getCurrentItem();
                    bannerViewPager.setCurrentItem(currentItem + 1);
                    sendEmptyMessageDelayed(CODE_BANNER_START, 2000);
                    break;
            }
        }
    };




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pull_to_refresh_listview);


        // 6.0动态权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 200);
        }


        listView = findViewById(R.id.pull_to_refresh);
        ListView refreshableView = listView.getRefreshableView();


        // 设置参数
        AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        View headView = View.inflate(this, R.layout.list_head, null);
        bannerViewPager = headView.findViewById(R.id.lun_bo);
        llPonit = headView.findViewById(R.id.ll_point);
        tvNum = headView.findViewById(R.id.tv_num);
        tvTitle = headView.findViewById(R.id.tv_title);
        // 给HeadView设置参数
        headView.setLayoutParams(params);




        refreshableView.addHeaderView(headView);


        listView.setMode(PullToRefreshBase.Mode.BOTH);
        listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                pullNum = 1;
                new ListThread().start();
            }


            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                pullNum++;
                new ListThread().start();
            }
        });


        listView.setAdapter(pullListAdapter);
        new LunBoThread().start();
        new ListThread().start();
    }


    class LunBoThread extends Thread {
        @Override
        public void run() {
            get(lunBoUrl + pullNum, CODE_BANNER_INIT);
        }
    }


    /**
     * 流转换
     *
     * @param inputStream
     * @return
     * @throws IOException
     */
    private String inputStream2String(InputStream inputStream) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        int len = -1;
        byte[] b = new byte[1024];
        while ((len = inputStream.read(b)) != -1) {
            outputStream.write(b, 0, len);
        }
        return new String(outputStream.toByteArray());
    }


    /**
     * 请求列表数据
     */
    class ListThread extends Thread {
        @Override
        public void run() {
            get(listUrl + pullNum + listParam, CODE_LIST);
        }
    }


    /**
     * get获取数据
     *
     * @param spec        要获取数据的地址
     * @param messageCode Handler处理消息的what
     */
    private void get(String spec, int messageCode) {
        try {
            URL url = new URL(spec);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setReadTimeout(5000);
            connection.setConnectTimeout(5000);
            if (connection.getResponseCode() == 200) {
                String result = inputStream2String(connection.getInputStream());
                Message message = Message.obtain();
                message.what = messageCode;
                message.obj = result;
                mHandler.sendMessage(message);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/liu_qunfeng/article/details/80794771