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

package com.example.communityfunction.myView;

import java.util.List;

import android.animation.Animator;
import android.animation.Animator.AnimatorListener;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.ActionBar.LayoutParams;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView; public class ImgViewPagerAdapter extends PagerAdapter
{
private List<Bitmap> imgBm;
private Context mContext;
private ViewPager pager; public ImgViewPagerAdapter(Context context,List<Bitmap>imgBm,ViewPager pager)
{
this.imgBm=imgBm;
this.mContext=context;
this.pager=pager;
}
@Override
public int getCount()
{
return imgBm.size();
}
@Override
public Object instantiateItem(final ViewGroup container, int position)
{
ImageView imageView=new ImageView(mContext);
imageView.setImageBitmap(imgBm.get(position));
container.addView(imageView,LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
imageView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
startAnim();
}
});
return imageView;
}
   // PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁
@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; //官方提示写法 }
/*
*动画效果
*/
public void startAnim()
{
AnimatorSet animSet = new AnimatorSet();
animSet.play(ObjectAnimator.ofFloat(pager, "alpha", 1.0f,0f))
.with(ObjectAnimator.ofFloat(pager, "scaleX",1.0f,0f))
.with(ObjectAnimator.ofFloat(pager, "scaleY",1.0f,0f));
animSet.setDuration(400);
animSet.start();
animSet.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {}
@Override
public void onAnimationRepeat(Animator animation) {}
@Override
public void onAnimationEnd(Animator animation)
{
pager.setVisibility(View.GONE);
}
@Override
public void onAnimationCancel(Animator animation){}
});
} }

注意:

在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. [翻译]Orchard如何工作

    Orchard一直是博主心中神一般的存在,由于水平比较菜,Orchard代码又比较复杂看了几次都不了了之了.这次下定决心要搞懂其工作原理,争取可以在自己的项目中有所应用.为了入门先到官网去学习一下相关 ...

  2. Fedora 22中的日期和时间配置

    Introduction Modern operating systems distinguish between the following two types of clocks: A real- ...

  3. LINQ Group By操作

    在上篇文章 .NET应用程序与数据库交互的若干问题 这篇文章中,讨论了一个计算热门商圈的问题,现在在这里扩展一下,假设我们需要从两张表中统计出热门商圈,这两张表内容如下: 上表是所有政区,商圈中的餐饮 ...

  4. HackerNews——《Pokemon Go玩家存在巨大的安全风险》

    译者注:原文来自HackerNews,首发tumblr,标题为Pokemon Go is a huge security risk.作者Adam Reeve,附一张这个胖子的帅照   (正文)之所以会 ...

  5. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总

    MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...

  6. Entity Framework 6 Recipes 2nd Edition(12-5)译 -> 自动删除相关联实体

    12-5. 自动删除相关联实体 问题 当一个实体被删除时,你想自动删除它相关联的实体 解决方案 假设你有一个表结构由一个course (科目), course 的classes (课程),以及enro ...

  7. exportfs 入门/ 错误

    exportfs -uv 不能卸载, exportfs -au 才可以 ================================================================ ...

  8. [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)

    在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库 ...

  9. SQL Server 系列文章快速导航(SWF版)

    一.前言 在博客园写博客不自不觉已经有5个年头了,一开始只是为了记录工作中遇到的问题和解决办法,后来写的文章不自不觉的侧重在SQL Server方面的技术文章,在2014年1月终于鼓起勇气申请了微软S ...

  10. SQL Server-聚焦LEFT JOIN...IS NULL AND NOT EXISTS性能分析(十七)

    前言 本节我们来分析LEFT JOIN和NOT EXISTS,简短的内容,深入的理解,Always to review the basics. LEFT JOIN...IS NULL和NOT EXIS ...