ViewPager是一个可以用来滑动内部View的组件,他有一个老搭档PagerAdapter,我们这次就来看看他们这两位拍档的本事。

我们要使用ViewPager与PagerAdapter结合


首先布局文件

<android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

然后实现自己的adapter继承PagerAdapter。实现PagerAdapter的方法

1、public int getCount();  //获取总View的数量

2、public void startUpdate(ViewGroup container)  ;
3、public Object instantiateItem(ViewGroup container, int position)  ; //实例化当前的View,添加到contrainer中,然后返回生成的View或关联的Object (用于在isViewFromObject中检查)

4、public void destroyItem(ViewGroup container, int position, Object object);  //从container中移除指定的View (释放内存)
5、public void finishUpdate(ViewGroup container)  ;

6、 public boolean isViewFromObject(View view, Object object) ;// 检查View是否与一个Object关联,

下面展示一下demo

  1. package com.example.communityfunction.myView;
  2.  
  3. import java.util.List;
  4.  
  5. import android.animation.Animator;
  6. import android.animation.Animator.AnimatorListener;
  7. import android.animation.AnimatorSet;
  8. import android.animation.ObjectAnimator;
  9. import android.app.ActionBar.LayoutParams;
  10. import android.content.Context;
  11. import android.graphics.Bitmap;
  12. import android.support.v4.view.PagerAdapter;
  13. import android.support.v4.view.ViewPager;
  14. import android.view.View;
  15. import android.view.View.OnClickListener;
  16. import android.view.ViewGroup;
  17. import android.widget.ImageView;
  18.  
  19. public class ImgViewPagerAdapter extends PagerAdapter
  20. {
  21. private List<Bitmap> imgBm;
  22. private Context mContext;
  23. private ViewPager pager;
  24.  
  25. public ImgViewPagerAdapter(Context context,List<Bitmap>imgBm,ViewPager pager)
  26. {
  27. this.imgBm=imgBm;
  28. this.mContext=context;
  29. this.pager=pager;
  30. }
  31. @Override
  32. public int getCount()
  33. {
  34. return imgBm.size();
  35. }
  36. @Override
  37. public Object instantiateItem(final ViewGroup container, int position)
  38. {
  39. ImageView imageView=new ImageView(mContext);
  40. imageView.setImageBitmap(imgBm.get(position));
  41. container.addView(imageView,LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
  42. imageView.setOnClickListener(new OnClickListener()
  43. {
  44. @Override
  45. public void onClick(View v)
  46. {
  47. startAnim();
  48. }
  49. });
  50. return imageView;
  51. }
  1. // PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁
  1. @Override public void destroyItem(ViewGroup container, int position, Object object)
    { container.removeView((View)object); };
    @Override public boolean isViewFromObject(View arg0, Object arg1)
    { return arg0==arg1; //官方提示写法 }
    /*
    *动画效果
    */
  2. public void startAnim()
  3. {
  4. AnimatorSet animSet = new AnimatorSet();
  5. animSet.play(ObjectAnimator.ofFloat(pager, "alpha", 1.0f,0f))
  6. .with(ObjectAnimator.ofFloat(pager, "scaleX",1.0f,0f))
  7. .with(ObjectAnimator.ofFloat(pager, "scaleY",1.0f,0f));
  8. animSet.setDuration(400);
  9. animSet.start();
  10. animSet.addListener(new AnimatorListener() {
  11. @Override
  12. public void onAnimationStart(Animator animation) {}
  13. @Override
  14. public void onAnimationRepeat(Animator animation) {}
  15. @Override
  16. public void onAnimationEnd(Animator animation)
  17. {
  18. pager.setVisibility(View.GONE);
  19. }
  20. @Override
  21. public void onAnimationCancel(Animator animation){}
  22. });
  23. }
  24.  
  25. }

注意:

在ViewPager 外面嵌套ScrollView 时,发现ViewPager中的元素显示不出来。

解决办法:
在ScrollView节点指定android:fillviewport="true"

ViewPager与PagerAdapter的更多相关文章

  1. Android Tab -- 使用ViewPager、PagerAdapter来实现

    原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换,自动切换. 代码:https://github.com/ldb ...

  2. 有关ViewPager的使用及解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题

    ViewPager是android-support-v4.jar包中的一个系统控件,继承自ViewGroup,专门用以实现左右滑动切换View的效果,使用时需要首先在Project->prope ...

  3. 转载---ViewPager,PagerAdapter,FragmentPagerAdapter和FragmentStatePagerAdapter的分析对比

    转载:http://blog.csdn.net/dreamzml/article/details/9951577 ViewPager ViewPager 如其名所述,是负责翻页的一个 View.准确说 ...

  4. Android:ViewPager适配器PagerAdapter的使用

    PageAdapter是一个抽象类,直接继承于Object,导入包android.support.v4.view.PagerAdapter即可使用. 要使用PagerAdapter, 首先要继承Pag ...

  5. Android开发UI之ViewPager及PagerAdapter

    ViewPager,官网链接--http://developer.android.com/reference/android/support/v4/view/ViewPager.html ViewPa ...

  6. ViewPager Fragment PagerAdapter MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. viewpager中 pagerAdapter使用详解

    必须覆盖以下方法instantiateItem(ViewGroup, int) 这个方法,return一个对象,这个对象表明了PagerAdapter适配器选择哪个对象*放在当前的ViewPager中 ...

  8. android ViewPager之PagerAdapter中View的重用

    在写PagerAdapter的时候,需要重写instantiateItem(ViewGroup  container ,int position)   此方法中,将需要加载的View,添加到conta ...

  9. 踩石行动:ViewPager无限轮播的坑

    2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...

随机推荐

  1. 使用Xamarin开发iOS7应用时隐藏StatusBar方法

    在iOS7之前如果需要隐藏StatusBar,比较简单,直接在AppDelegate.cs中使用如下代码就可以进行隐藏: UIApplication.SharedApplication.StatusB ...

  2. NodeJs 开发微信公众号(五)真实环境部署

    在测试环境下开发完成代表着你离正式上线的目标不远了.接下来本章就主要谈一谈把测试环境的公众号升级为正式的公众号. 服务器和域名 目前为止我们只是在自己的电脑上完成了测试环境.真实的线上环境当然需要自己 ...

  3. 页面与ViewModel(下)

    在上一篇博客中,笔者分享了一些从页面整体的角度对页面与ViewModel的思考.在本文中笔者希望从相对细节的角度分享一些对页面与ViewModel的思考. 比如,当我们在更新View Model中的绑 ...

  4. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...

  5. CSharpGL(17)重构CSharpGL

    CSharpGL(17)重构CSharpGL CSharpGL用起来我自己都觉得繁琐了,这是到了重构的时候. 下载 CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入(https ...

  6. Vue ES6 Jade Scss Webpack Gulp

    一直以来非常庆幸曾经有翻过<代码大全2>:这使我崎岖编程之路少了很多不必要的坎坷.它在软件工艺的话题中有写到一篇:"首先是为人写程序,其次才是机器(Write Programs ...

  7. Python开发环境配置

    好久没有写博客了,自从6月份毕业后,进入一家做书法.字画文化宣传的互联网公司(www.manyiaby.com),这段时间一直在进行前端开发,对于后端的使用很少了,整天都是什么html.css.jav ...

  8. 原生Ajax总结

    HTTP协议 传统的请求和Ajax请求 Ajax定义 Asynchronous JavaScript and XML. Ajax异步的,JavaScript程序希望与服务器直接通信而不需要重新加载页面 ...

  9. Android开发之Activity的创建跳转及传值

    在Android系统的江湖中有四大组件:活动(Activity), 服务(Service), 广播接收器(Broadcast Reciver)和内容提供者(Content Provider).今天所介 ...

  10. JQuery 加载 CSS、JS 文件

    JS 方式加载 CSS.JS 文件: //加载 css 文件 function includeCss(filename) { var head = document.getElementsByTagN ...