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