PullToRefreshScrollView 无限轮播与MyListView

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:ptr="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.monikaoshi.MainViewListView">
    <com.handmark.pulltorefresh.library.PullToRefreshScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ptr:ptrDrawable="@drawable/default_ptr_flip"
        ptr:ptrAnimationStyle="flip"
        ptr:ptrHeaderBackground="#383838"
        ptr:ptrHeaderTextColor="#FFFFFF"
        android:id="@+id/psl">
        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="vertical"
            android:layout_height="match_parent">
            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <android.support.v4.view.ViewPager
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:id="@+id/viewpagers"></android.support.v4.view.ViewPager>
                <LinearLayout
                    android:id="@+id/linout"
                    android:orientation="horizontal"
                    android:gravity="center"
                    android:layout_gravity="bottom"
                    android:layout_marginTop="130dp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"></LinearLayout>
            </FrameLayout>
            <com.example.monikaoshi.MyListView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/myListView"></com.example.monikaoshi.MyListView>
        </LinearLayout>

    </com.handmark.pulltorefresh.library.PullToRefreshScrollView>

</RelativeLayout>

-----------------------------------------------------------------------------------------------------------

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class MainViewListView extends AppCompatActivity {

    private PullToRefreshScrollView psl;
    private ViewPager viewPager;
    private MyListView myListView;
    //创建集合用于存储viewPager数据
    private List<MyBean_ViewPager> listBean = new ArrayList<>();
    private List<ImageView> listImg = new ArrayList<>();

    private int pageIndex = 1;
    private int clickType = 1;
    private String myUrl = "http://api.tianapi.com/keji/?key=55acaf346503d8d5f98af8dec90ceb01&num=10&page="+pageIndex;
    private List<MyGson_MyList.NewslistBean> newslists = new ArrayList<>();

    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //获取当前页面的下标
            int currentItem = viewPager.getCurrentItem();
            currentItem++;
            viewPager.setCurrentItem(currentItem);
            setYuanDian(currentItem%listBean.size());
            //再次发送消息
            sendEmptyMessageDelayed(1,1000);
        }
    };
    private MyMListViewBase mbase;
    private LinearLayout linearLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_view_list_view);
        //初始化资源控件
        initView();
        //请求轮播图的数据数据
        requestDataViewPager();
        //初始化psl
        initPsl();
        //请求MyListViwe的数据
        requestDataListView();

    }

    private void requestDataListView() {
        //调用请求网络数据的工具类
        RequestDataUtil dataUtil = new RequestDataUtil(new RequestDataUtil.IcallBack() {
            @Override
            public void getJson(String jsonData) {
                //解析数据
                Gson gson = new Gson();
                MyGson_MyList myGson_myList = gson.fromJson(jsonData, MyGson_MyList.class);
                List<MyGson_MyList.NewslistBean> newslist = myGson_myList.getNewslist();
                if(clickType == 1){
                    newslists.clear();
                }
                newslists.addAll(newslist);
                //设置适配器
                setAdapters();
                psl.onRefreshComplete();//关闭上拉加载 下拉刷新
            }
        });
        //这一步不能忘
        dataUtil.execute(myUrl);
    }
    //设置适配器
    private void setAdapters() {
        if (mbase == null) {
            mbase = new MyMListViewBase(MainViewListView.this,newslists);
            myListView.setAdapter(mbase);
        } else {
            mbase.notifyDataSetChanged();//刷新适配器
        }
    }

    //初始化psl
    private void initPsl() {
        psl.setMode(PullToRefreshBase.Mode.BOTH);
        psl.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ScrollView> pullToRefreshBase) {
                Toast.makeText(MainViewListView.this, "下拉刷新了", Toast.LENGTH_SHORT).show();
                //下拉刷新
                pageIndex = 1;
                clickType = 1;
                myUrl = "http://api.tianapi.com/keji/?key=55acaf346503d8d5f98af8dec90ceb01&num=10&page="+pageIndex;
                //请求MyListViwe的数据
                requestDataListView();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ScrollView> pullToRefreshBase) {
                //上拉加载跟多
                pageIndex++;
                clickType = 2;
                myUrl = "http://api.tianapi.com/keji/?key=55acaf346503d8d5f98af8dec90ceb01&num=10&page="+pageIndex;
                //请求MyListViwe的数据
                requestDataListView();
            }
        });
    }
    //设置viewPager适配器
    private void setShiPeiQi() {
        MyViewPagerBase base = new MyViewPagerBase(MainViewListView.this,listBean);
        viewPager.setAdapter(base);
        //默认显示的页面
        viewPager.setCurrentItem(listBean.size()*10);
        //延迟发送消息  设置无线轮播
        handler.sendEmptyMessageDelayed(1,1000);

        viewPager.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        //手指按下事件
                        int currentItem = viewPager.getCurrentItem();
                        String content = listBean.get(currentItem%listBean.size()).getTitles();
                        Toast.makeText(MainViewListView.this, ""+content, Toast.LENGTH_SHORT).show();
                        handler.removeMessages(1);
                        break;
                    case MotionEvent.ACTION_MOVE:
                        handler.removeMessages(1);
                        break;
                    case MotionEvent.ACTION_UP:
                        handler.sendEmptyMessageDelayed(1,1000);
                        break;
                    case MotionEvent.ACTION_CANCEL:
                        handler.sendEmptyMessageDelayed(1,1000);
                        break;
                }
                return false;
            }
        });

    }
    //请求轮播图数据
    private void requestDataViewPager() {
        RequestDataUtil dataUtil = new RequestDataUtil(new RequestDataUtil.IcallBack() {
            @Override
            public void getJson(String jsonData) {
                Gson gson = new Gson();
                MyGson_ViewPager myGson_viewPager = gson.fromJson(jsonData, MyGson_ViewPager.class);
                List<MyGson_ViewPager.DataBean> data = myGson_viewPager.getData();
                //获取图片地址
                for (int i = 0; i < data.size(); i++) {
                    listBean.add(new MyBean_ViewPager(data.get(i).getIcon(),data.get(i).getTitle()));
                }
                //动态添加小圆点指示器
                for (int i = 0; i < listBean.size(); i++) {
                    ImageView imageView = new ImageView(MainViewListView.this);
                    if(i == 0){
                        imageView.setImageResource(R.drawable.del_bj);
                    }else {
                        imageView.setImageResource(R.drawable.edit_bj);
                    }
                    linearLayout.addView(imageView);//将控件添加到站位布局中
                    listImg.add(imageView);//将控件添加到集合当中
                }
                //设置适配器
                setShiPeiQi();
            }
        });
        dataUtil.execute("https://www.zhaoapi.cn/quarter/getAd");
    }
    //初始化控件
    private void initView() {
        psl = findViewById(R.id.psl);
        viewPager = findViewById(R.id.viewpagers);
        myListView = findViewById(R.id.myListView);
        linearLayout = findViewById(R.id.linout);
    }

    //设置小圆点
    private void  setYuanDian(int index){
        for (int i = 0; i < listImg.size(); i++) {
            if(index == i){
                listImg.get(i).setImageResource(R.drawable.del_bj);
            }else {
                listImg.get(i).setImageResource(R.drawable.edit_bj);
            }
        }
    }
}
-------------------------------------------------------------------------------------------------
轮播图适配器

import java.util.List;

/**
 * Created by John on 2018/5/3 0003.
 */

public class MyBase_LunBo extends PagerAdapter {
    private Context context;
    private List<LunBoData> lunBoData;
    private final DisplayImageOptions options;

    public MyBase_LunBo(Context context, List<LunBoData> lunBoData) {
        this.context = context;
        this.lunBoData = lunBoData;
        options = new DisplayImageOptions.Builder()
                .cacheInMemory(true)//使用内存缓存
                .cacheOnDisk(true)//使用磁盘缓存
                .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时
                .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式
                .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式
                .build();
    }

    @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(context);
        //下载图片
        ImageLoader.getInstance().displayImage(lunBoData.get(position%lunBoData.size()).getUrl(),imageView,options);
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}
 

猜你喜欢

转载自blog.csdn.net/qq_14876513/article/details/80170847