ViewPager概念:
ViewPager是一个允许使用者左右滑动数据页面的布局管理器。你可以通过一个适配器(PagerAdapter)来管理要显示的页面。不过要注意的是,这个类目前还处于初期的设计和开发。随着今后兼容库的更新,API文档也会进行更改,同时应用程序在编译时也需要对代码进行一定的修改。ViewPager更多的时候会与Fragment一起使用,这是一种很好的方法来管理各个页面的生命周期。Android提供了一些专门的适配器来让ViewPager与Fragment一起工作,也就是FragmentPagerAdapter与FragmentStatePagerAdapter。他们基本上可以满足大部分常见的永续需求,并且他们都有简单的代码样例来展示如何用他们来建立一个完整的用户页面。
ViewPager应用场景:
Android中ViewPager是允许使用者左右滑动数据页面的布局管理器,我们可以利用他做很多炫酷的效果,其中比较经典的案例就是:
一、原理
首先,将这些要轮播的图片和一些文本分别放置在不同的数据集合中,程序启动的时候默认显示一组图片和文本数据,然后启动一个定时器,每隔一段时间便替换掉显示的图片和文本数据,同时加入一些动画效果,已达到轮播的特效。同时,我们也要实现手指滑动图片达到轮播的效果。
二、实现
Xml部分:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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.aaaa.why.view_pager.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="200dp"> </android.support.v4.view.ViewPager> </android.support.constraint.ConstraintLayout>
MainActivity部分:
public class MainActivity extends AppCompatActivity { private ViewPager view_pager; @SuppressLint("HandlerLeak") Handler handler= new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what==0){ String json = (String) msg.obj; parseData(json); } if(msg.what==1){ int currentItem = view_pager.getCurrentItem(); currentItem++; view_pager.setCurrentItem(currentItem); shuaxin(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); view_pager = (ViewPager)findViewById(R.id.view_pager); new Thread(){ @Override public void run() { super.run(); String getjson = NetUtil.getjson(); Message msg= Message.obtain(); msg.what=0; msg.obj=getjson; handler.sendMessage(msg); } }.start(); } //解析字符串 private void parseData(String json){ Gson gson = new Gson(); Bean bean = gson.fromJson(json, Bean.class); List<Bean.Adlist> adlist = bean.data.adlist; MyAdapter adapter= new MyAdapter(adlist,MainActivity.this); view_pager.setAdapter(adapter); shuaxin(); } private void shuaxin() { handler.sendEmptyMessageDelayed(1,2000); } }
适配器部分:
public class MyAdapter extends PagerAdapter{ private List<Bean.Adlist> list; private Context context; public MyAdapter(List<Bean.Adlist> list, Context context) { this.list = list; this.context = context; } @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); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ImageLoader.getInstance().displayImage(list.get(position%list.size()).img,imageView); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }
Bean类:
public class Bean { public Data data; public class Data{ public List<Adlist> adlist; } public class Adlist{ public String id; public String img; } }
解析部分:
public class NetUtil { private static ByteArrayOutputStream baos; static String path="http://www.meirixue.com/api.php?c=index&a=index"; public static String getjson(){ try { URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); int responseCode = connection.getResponseCode(); baos = new ByteArrayOutputStream(); if(responseCode==200){ InputStream inputStream = connection.getInputStream(); int len; byte[] arr = new byte[1024]; while ((len=inputStream.read(arr))!=-1){ baos.write(arr,0,len); } } return baos.toString(); } catch (Exception e) { e.printStackTrace(); } return ""; } }