PullToRefreshScrollView+ViewPager無線輪播+ListView展示
阿新 • • 發佈:2019-02-18
實現效果 拉動重新整理時,ViewPager與ListView都會有拉動的效果
///////////////////////////////佈局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="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.administrator.demo02.MainActivity"//////////////////////////////////////////////////////////////////程式碼> <com.handmark.pulltorefresh.library.PullToRefreshScrollView android:id="@+id/My_scrollview" xmlns:ptr="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent" android:layout_width="match_parent" ptr:ptrDrawable="@drawable/default_ptr_flip" ptr:ptrAnimationStyle="flip" ptr:ptrHeaderBackground="#383838" ptr:ptrHeaderTextColor="#FFFFFF"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/My_viewpager" android:layout_width="match_parent" android:layout_height="200dp"> </android.support.v4.view.ViewPager> <com.example.administrator.demo02.listview.ListViewForRefresh android:id="@+id/My_listview" android:layout_width="match_parent" android:layout_height="match_parent"> </com.example.administrator.demo02.listview.ListViewForRefresh> </LinearLayout> </com.handmark.pulltorefresh.library.PullToRefreshScrollView> </LinearLayout>
import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.ScrollView; import com.example.administrator.demo02.listview.ListViewForRefresh; import com.example.administrator.demo02.util.JsonStringCallaBack; import com.example.administrator.demo02.util.NetDataUtil; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.ILoadingLayout; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshScrollView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private PullToRefreshScrollView scrollView; private ViewPager viewPager; private ListViewForRefresh listView; private Myadapter imageadapter; private ArrayAdapter<String> adapter; private int i = 1; private List<String> toplist = new ArrayList<>(); private List<String> list; //建立圖片的集合 List<String> imagelist = new ArrayList<>(); Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == 0){ //下一張,設定當前的圖片 viewPager.setCurrentItem(viewPager.getCurrentItem()+1); //傳送延遲 handler.sendEmptyMessageDelayed(0,2000); } } }; //主方法 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找到控制元件 scrollView = (PullToRefreshScrollView) findViewById(R.id.My_scrollview); viewPager = (ViewPager) findViewById(R.id.My_viewpager); listView = (ListViewForRefresh) findViewById(R.id.My_listview); //從網路獲取資料 getDataFromNet(); //支援上下拉動 scrollView.setMode(PullToRefreshBase.Mode.BOTH); //設定上下拉動展示的文字 initRefreshListView(); //監聽事件 scrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2 <ScrollView>() { //下拉 @Override public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) { //重新整理資料 refreshData(); } //上拉 @Override public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) { //獲取資料 getDataFromNet(); } }); NetDataUtil.getData(MainActivity.this, "http://v.juhe.cn/toutiao/index? type=top&key=93100289018f7f188cb0bd55bd3c5b38", new JsonStringCallaBack() { @Override public void getJsonString(String json) { //解析 獲取圖片集合 Gson gson1 = new Gson(); DateDateBean dateDateBean = gson1.fromJson(json, DateDateBean.class); List<DateDateBean.ResultBean.DataBean> date = dateDateBean.getResult().getData(); //把所有的圖片放到集合中 for (DateDateBean.ResultBean.DataBean mydate:date) { imagelist.add(mydate.getThumbnail_pic_s()); } Log.d("TAGA","--------"+imagelist.size()); //給viewpager設定輪播圖效果介面卡 setimageadapter(); //設定當前展示的頁面 viewPager.setCurrentItem(imagelist.size()*100000); //每隔兩秒傳送一次 handler.sendEmptyMessageDelayed(0,2000); } }); } //重新整理資料 下拉時用 /** * */ private void refreshData() { NetDataUtil.getData(MainActivity.this, "http://japi.juhe.cn /joke/content/list.from?key=9e47d352272a481e517dc83ea1e3637c&page=2 &pagesize=10&sort=asc&time=1418745237", new JsonStringCallaBack() { @Override public void getJsonString(String json) { toplist.clear(); list = new ArrayList<>(); Gson gson = new Gson(); DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class); List<DataDataBean.ResultBean.DataBean> data = dataDataBean.getResult().getData(); for (DataDataBean.ResultBean.DataBean mydata : data) { list.add(mydata.getContent()); } Log.d("TAG", "++++++++++++++" + list.size()); toplist.addAll(0, list); //設定介面卡 setadapter(); //停止重新整理 scrollView.onRefreshComplete(); } }); } //從網路獲取資料 public void getDataFromNet() { NetDataUtil.getData(MainActivity.this, "http:// japi.juhe.cn/joke/content/list .from?key=9e47d352272a481e517 dc83ea1e3637c&page=2&pagesize=10&sort=asc&time=1418745237" , new JsonStringCallaBack() { @Override public void getJsonString(String json) { list = new ArrayList<>(); Gson gson = new Gson(); DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class); List<DataDataBean.ResultBean.DataBean> data = dataDataBean.getResult().getData(); for (DataDataBean.ResultBean.DataBean mydata : data) { list.add(mydata.getContent()); } Log.d("TAG", "++++++++++++++" + list.size()); toplist.addAll(list); //設定介面卡 setadapter(); //停止重新整理 scrollView.onRefreshComplete(); } }); } //上下拉動時顯示的文字 public void initRefreshListView() { ILoadingLayout startLabels = scrollView .getLoadingLayoutProxy(true, false); startLabels.setPullLabel("下拉重新整理"); startLabels.setRefreshingLabel("正在拉"); startLabels.setReleaseLabel("放開重新整理"); ILoadingLayout endLabels = scrollView.getLoadingLayoutProxy( false, true); endLabels.setPullLabel("上拉重新整理"); endLabels.setRefreshingLabel("正在載入..."); endLabels.setReleaseLabel("放開重新整理..."); } //文字的介面卡 private void setadapter() { if (adapter == null) { adapter = new ArrayAdapter<String> (MainActivity.this, android.R.layout.simple_list_item_1, toplist); listView.setAdapter(adapter); } else { adapter.notifyDataSetChanged(); } } //圖片的介面卡 private void setimageadapter() { if (imageadapter == null) { //建立介面卡 imageadapter = new Myadapter(MainActivity.this,imagelist,handler); //設定介面卡 viewPager.setAdapter(imageadapter); } else { //重新整理介面卡 imageadapter.notifyDataSetChanged(); } } }
////////////////////////////////////////////////////////////////////////////////////////////////////圖片的介面卡
class Myadapter extends PagerAdapter { Context context; List<String> list; Handler hander; public Myadapter(Context context, List<String> list, Handler handler) { this.list = list; this.context = context; this.hander = handler; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = new ImageView(context); //設定圖片平鋪整個控制元件 imageView.setScaleType(ImageView.ScaleType.FIT_XY); //使用網路獲取的圖片position%list.size()將position控制在集合長度之內 ImageLoader.getInstance().displayImage (list.get(position%list.size()),imageView, ImageLoaderUtil.display()); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } }///////////////////Listview放在重新整理控制元件中只能顯示一條,所以要建立一個類
public class ListViewForRefresh extends ListView { public ListViewForRefresh(Context context) { super(context); } public ListViewForRefresh(Context context, AttributeSet attrs) { super(context, attrs); } public ListViewForRefresh(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); } }