ViewFlipper和ViewPager都是android的组件,它们有什么不同呢?看到【 http://www.eoeandroid.com/thread-276918-1-1.html 】有个回帖很经典,就抄过来:
ViewFlipper继承ViewAnimator,切换view的时候是有动画效果的,适合做ppt,多界面的程序欢迎引导界面,算是个轻量级的组件,适合展示静态数据,少量数据。 ViewPager继承ViewGroup。看官网描述,这货和Fragment是好搭档,Fragment有自己的生命周期。也就是说ViewPager更适用复杂的视图切换,而且Viewpager有自己的adapter,这也让其适应复杂对象,实现数据的动态加载。
这里先简单的备份下学习心得。
github
【 https://github.com/cstriker1407/android/tree/master/HelloViewPager 】
CONTENTS
ViewPager的简单使用
学习代码主要参考【 http://blog.csdn.net/wangjinyu501/article/details/8169924 】。由于篇幅关系,就不在拷贝到本日志里了。
更多参考
【 http://my.eoe.cn/fashr314/archive/10358.html 】
【 http://blog.csdn.net/android_tutor/article/details/7980239 】
ViewPager的循环实现
public class MainActivity extends Activity { private static final int page_size = 5000; private View view1, view2, view3, view4; private ViewPager viewPager; private List<View> viewList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = (ViewPager) findViewById(R.id.viewpager); view1 = View.inflate(this,R.layout.layout1, null); view2 = View.inflate(this,R.layout.layout2, null); view3 = View.inflate(this,R.layout.layout3, null); view4 = View.inflate(this,R.layout.layout4, null); viewList = new ArrayList<View>();// 将要分页显示的View装入数组中 viewList.add(view1); viewList.add(view2); viewList.add(view3); viewList.add(view4); PagerAdapter pagerAdapter = new PagerAdapter() { @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public int getCount() { return page_size; } @Override public void destroyItem(ViewGroup container, int position, Object object) { Log.d("", "destroy item called:" + position); View view = viewList.get(position % viewList.size()); container.removeView(viewList.get(position % viewList.size())); view.setTag("remove"); } @Override public Object instantiateItem(ViewGroup container, int position) { Log.d("", "instantiateItem called:" + position); View view = viewList.get(position % viewList.size()); if (view.getTag()== null || view.getTag().toString().equals("remove")) { Log.d("", "view added called:" + position + " viewpos:" + position % viewList.size()); container.addView(view); view.setTag("add"); } return view; } }; viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int arg0) { Log.d("", "onPageSelected called:" + arg0); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); viewPager.setAdapter(pagerAdapter); viewPager.setCurrentItem(page_size/2, false); } }
备注:
1)循环ViewPager的实现思路主要是告诉adapter有一个很大的view数组,这里为5000,然后在View的创建和销毁的回调中检测Position,根据Position%Views.size()来确定实际要显示的View。
2)代码经过测试,发现在ViewPager有4个及以上的View时,可以正常使用。有3个及以下时,无法正常使用。后续需要仔细研究下。
发表评论