swipetoloaddemo

来源:互联网 发布:软件开发培训学校 编辑:程序博客网 时间:2024/05/20 12:47
package com.example.administrator.swipetoloaddemo;import android.net.Uri;import android.os.Handler;import android.os.Message;import android.support.v4.view.ViewPager;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.ScrollView;import com.aspsine.swipetoloadlayout.OnLoadMoreListener;import com.aspsine.swipetoloadlayout.OnRefreshListener;import com.aspsine.swipetoloadlayout.SwipeToLoadLayout;import com.google.android.gms.appindexing.Action;import com.google.android.gms.appindexing.AppIndex;import com.google.android.gms.common.api.GoogleApiClient;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private SwipeToLoadLayout swipeToLoadLayout;    private RefreshHeaderView swipe_refresh_header;    private LoadMoreFooterView swipe_load_more_footer;    private ViewPager vp;    //底部页面小圆点布局    private LinearLayout l;    //展示的视图列表    private List<ImageView>imglist;    private ListView lv;    private int[]imgs={R.mipmap.hg,R.mipmap.hl,R.mipmap.my,R.mipmap.tl};    //是否自动轮播    private boolean isAuto=true;    //是否手动滑动视图    private boolean isTouch=false;    //当前显示的页面的position    private int currentIndex=0;    //底部当前小圆点    private ImageView[]bottomimg;    private ScrollView sl;    private List<String> list;    private ArrayAdapter adapter;    private View foot;    private View head;    /**     * ATTENTION: This was auto-generated to implement the App Indexing API.     * See https://g.co/AppIndexing/AndroidStudio for more information.     */    private GoogleApiClient client;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化id        vp=(ViewPager)findViewById(R.id.vp);        l=(LinearLayout)findViewById(R.id.l);        lv=(ListView)findViewById(R.id.lv);        initViewPager();        initBottom();        t.start();        swipeToLoadLayout = (SwipeToLoadLayout) findViewById(R.id.swipeToLoadLayout);        swipe_refresh_header=(RefreshHeaderView)findViewById(R.id.swipe_refresh_header);        swipe_load_more_footer=(LoadMoreFooterView)findViewById(R.id.swipe_load_more_footer);        swipeToLoadLayout.setRefreshHeaderView(swipe_refresh_header);        swipeToLoadLayout.setLoadMoreFooterView(swipe_load_more_footer);        sl= (ScrollView) findViewById(R.id.swipe_target);        sl.smoothScrollTo(0, 0);        //为recyclerView设置布局管理器        list = new ArrayList<String >();        for (int i = 0; i < 20; i++) {            list.add("原始数据"+i);        }        adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);        //为recyclerView设置适配器        lv.setAdapter(adapter);        //为swipeToLoadLayout设置下拉刷新监听者        swipeToLoadLayout.setOnRefreshListener(new OnRefreshListener() {            @Override            public void onRefresh() {                for (int i = 0; i < 3; i++) {                    list.add(0, "刷新获得的数据");                }                adapter.notifyDataSetChanged();                //设置下拉刷新结束                swipeToLoadLayout.setRefreshing(false);            }        });        //为swipeToLoadLayout设置上拉加载更多监听者        swipeToLoadLayout.setOnLoadMoreListener(new OnLoadMoreListener() {            @Override            public void onLoadMore() {                for (int i = 0; i < 5; i++) {                    list.add("加载更多获得的数据");                }                adapter.notifyDataSetChanged();                //设置上拉加载更多结束                swipeToLoadLayout.setLoadingMore(false);            }        });        // ATTENTION: This was auto-generated to implement the App Indexing API.        // See https://g.co/AppIndexing/AndroidStudio for more information.        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();    }    public void initViewPager(){        imglist=new ArrayList<ImageView>();        for(int i=0;i<imgs.length;i++){            View v=LayoutInflater.from(this).inflate(R.layout.item,null);            ImageView img=(ImageView)v.findViewById(R.id.img);            imglist.add(img);            img.setImageResource(imgs[i]);        }        MyAdapter adapter=new MyAdapter(imglist);        vp.setAdapter(adapter);    }    Thread t=new Thread(new Runnable() {        @Override        public void run() {            while(isAuto){                try {                    t.sleep(3000);                    handler.sendEmptyMessage(0);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    });    Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            if(msg.what==0){                if(isTouch){                    return;                }                currentIndex++;                vp.setCurrentItem(currentIndex);            }            super.handleMessage(msg);        }    };    @Override    protected void onDestroy() {        //让线程停止        isTouch=false;    }    private void initBottom(){        bottomimg=new ImageView[imgs.length];        for(int j=0;j<bottomimg.length;j++){            ImageView bottom=new ImageView(this);            //给bottom控件加上布局属性            LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(60,60);            //外边距 左  上  右  下            params.setMargins(5,0,5,0);            bottom.setLayoutParams(params);            //初始时默认第一个小圆点是选中的状态            if(j==0){                bottom.setImageResource(R.mipmap.y);            }else{                bottom.setImageResource(R.mipmap.y1);            }            bottomimg[j]=bottom;            //把小圆点的视图加入到线性布局里            l.addView(bottom);        }        vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                //将当前显示页面的position对应的小圆点设为选中状态                for(int i=0;i<bottomimg.length;i++){                    int p=position%imglist.size();                    if(i==p){                        bottomimg[i].setImageResource(R.mipmap.y);                    }else{                        bottomimg[i].setImageResource(R.mipmap.y1);                    }                }                //当前显示的position赋值给成员变量                currentIndex=position;            }            @Override            public void onPageScrollStateChanged(int state) {                //判断是否在手动滑动                //当手动滑动视图的时候,把isTouch设为true                if(state==ViewPager.SCROLL_STATE_IDLE){                    isTouch=false;                }else{                    isTouch=true;                }            }        });    }}package com.example.administrator.swipetoloaddemo;import android.content.Context;import android.util.AttributeSet;import android.widget.ListView;public class ListViewForScrollView extends ListView {    public ListViewForScrollView(Context context) {        super(context);    }    public ListViewForScrollView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public ListViewForScrollView(Context context, AttributeSet attrs,                                 int defStyle) {        super(context, attrs, defStyle);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,                MeasureSpec.AT_MOST);        super.onMeasure(widthMeasureSpec, expandSpec);    }}package com.example.administrator.swipetoloaddemo;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.ProgressBar;import android.widget.TextView;import com.aspsine.swipetoloadlayout.SwipeLoadMoreTrigger;import com.aspsine.swipetoloadlayout.SwipeTrigger;/** * Created by Administrator on 2017/2/23. */public class LoadMoreFooterView extends LinearLayout implements SwipeTrigger, SwipeLoadMoreTrigger {    private TextView tv;    private ProgressBar pb;    private void init() {        //这个view随意定义        //这里的原理就是简单的动态布局添加        ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);        View view = View.inflate(getContext(), R.layout.foot, null);        addView(view, lp);        tv = (TextView) view.findViewById(R.id.tv);        pb=(ProgressBar)findViewById(R.id.pb);    }    public LoadMoreFooterView(Context context) {        this(context,null,0);    }    public LoadMoreFooterView(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public LoadMoreFooterView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init();    }    @Override    public void onLoadMore() {        tv.setText("加载更多");    }    @Override    public void onPrepare() {        tv.setText("准备");    }    @Override    public void onMove(int yScrolled, boolean isComplete, boolean automatic) {        if (!isComplete) {            if (yScrolled <= -getHeight()) {                tv.setText("");            } else {                tv.setText("");            }        } else {            tv.setText("LOAD MORE RETURNING");        }    }    @Override    public void onRelease() {        tv.setText("");    }    @Override    public void onComplete() {        tv.setText("完成");    }    @Override    public void onReset() {        tv.setText("");    }}package com.example.administrator.swipetoloaddemo;import android.content.Context;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.ViewGroup;import android.view.ViewParent;import android.widget.ImageView;import java.util.List;/** * Created by Administrator on 2017/2/23. */public class MyAdapter extends PagerAdapter {    private List<ImageView>imglist;    public MyAdapter(List<ImageView>imglist){        this.imglist=imglist;    }    @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) {        int p=position%imglist.size();        ImageView img=imglist.get(p);        ViewParent vp=img.getParent();        if(vp!=null){            ViewGroup parent= (ViewGroup) vp;            parent.removeView(img);        }        container.addView(imglist.get(p));        return imglist.get(p);    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        int p=position%imglist.size();        container.removeView(imglist.get(p));    }}package com.example.administrator.swipetoloaddemo;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.ProgressBar;import android.widget.TextView;import com.aspsine.swipetoloadlayout.SwipeRefreshTrigger;import com.aspsine.swipetoloadlayout.SwipeTrigger;/** * Created by Administrator on 2017/2/23. */public class RefreshHeaderView extends LinearLayout implements SwipeRefreshTrigger, SwipeTrigger {    private TextView tv;    private ProgressBar pb;    private void init() {        //这个view随意定义        //这里的原理就是简单的动态布局添加        ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);        View view = View.inflate(getContext(), R.layout.head, null);        addView(view, lp);        tv = (TextView) view.findViewById(R.id.tv);        pb=(ProgressBar)findViewById(R.id.pb);    }    public RefreshHeaderView(Context context) {        this(context,null,0);    }    public RefreshHeaderView(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public RefreshHeaderView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init();    }    @Override    public void onRefresh() {        tv.setText("正在刷新");    }    @Override    public void onPrepare() {        tv.setText("准备");    }    @Override    public void onMove(int yScrolled, boolean isComplete, boolean automatic) {        if (!isComplete) {            if (yScrolled >= getHeight()) {                tv.setText("正在刷新");            } else {                tv.setText("下拉刷新");            }        } else {            tv.setText("刷新返回");        }    }    @Override    public void onRelease() {    }    @Override    public void onComplete() {        tv.setText("刷新完成");    }    @Override    public void onReset() {        tv.setText("准备");    }}

activity_main

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.administrator.swipetoloaddemo.MainActivity">    <com.aspsine.swipetoloadlayout.SwipeToLoadLayout        android:id="@+id/swipeToLoadLayout"        android:layout_width="match_parent"        android:layout_height="match_parent">        <com.example.administrator.swipetoloaddemo.RefreshHeaderView            android:id="@id/swipe_refresh_header"            android:layout_width="match_parent"            android:layout_height="100dp"            android:gravity="center"/>        <ScrollView            android:id="@+id/swipe_target"            android:layout_width="match_parent"            android:layout_height="match_parent"            >            <LinearLayout                android:layout_width="match_parent"                android:layout_height="match_parent"                android:orientation="vertical" >                <RelativeLayout                    android:layout_width="match_parent"                    android:layout_height="180dp" >                    <android.support.v4.view.ViewPager                        android:id="@+id/vp"                        android:layout_width="match_parent"                        android:layout_height="match_parent"/>                    <LinearLayout                        android:id="@+id/l"                        android:orientation="horizontal"                        android:layout_width="wrap_content"                        android:layout_height="wrap_content"                        android:layout_alignParentBottom="true"                        android:layout_centerHorizontal="true"                        android:layout_marginBottom="10dp"                        />                </RelativeLayout>                <com.example.administrator.swipetoloaddemo.ListViewForScrollView                    android:id="@+id/lv"                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:layout_below="@+id/sl" />            </LinearLayout>        </ScrollView>        <com.example.administrator.swipetoloaddemo.LoadMoreFooterView            android:id="@id/swipe_load_more_footer"            android:layout_width="match_parent"            android:layout_height="100dp"            android:gravity="center" />    </com.aspsine.swipetoloadlayout.SwipeToLoadLayout></RelativeLayout>foot<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <ProgressBar        android:id="@+id/pb"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        style="@android:style/Widget.ProgressBar.Small.Inverse"        android:layout_gravity="center_horizontal"        android:layout_marginTop="10dp"/>    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center_horizontal"        android:layout_marginTop="5dp"/></LinearLayout>head<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <ProgressBar        android:id="@+id/pb"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        style="@android:style/Widget.ProgressBar.Small.Inverse"        android:layout_gravity="center_horizontal"        android:layout_marginTop="10dp"/>    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center_horizontal"        android:layout_marginTop="5dp"/></LinearLayout>item<?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">    <ImageView        android:id="@+id/img"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        /></RelativeLayout>

0 0