ViewPager与PagerAdapter
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的更多相关文章
- Android Tab -- 使用ViewPager、PagerAdapter来实现
原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换,自动切换. 代码:https://github.com/ldb ...
- 有关ViewPager的使用及解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
ViewPager是android-support-v4.jar包中的一个系统控件,继承自ViewGroup,专门用以实现左右滑动切换View的效果,使用时需要首先在Project->prope ...
- 转载---ViewPager,PagerAdapter,FragmentPagerAdapter和FragmentStatePagerAdapter的分析对比
转载:http://blog.csdn.net/dreamzml/article/details/9951577 ViewPager ViewPager 如其名所述,是负责翻页的一个 View.准确说 ...
- Android:ViewPager适配器PagerAdapter的使用
PageAdapter是一个抽象类,直接继承于Object,导入包android.support.v4.view.PagerAdapter即可使用. 要使用PagerAdapter, 首先要继承Pag ...
- Android开发UI之ViewPager及PagerAdapter
ViewPager,官网链接--http://developer.android.com/reference/android/support/v4/view/ViewPager.html ViewPa ...
- ViewPager Fragment PagerAdapter MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- viewpager中 pagerAdapter使用详解
必须覆盖以下方法instantiateItem(ViewGroup, int) 这个方法,return一个对象,这个对象表明了PagerAdapter适配器选择哪个对象*放在当前的ViewPager中 ...
- android ViewPager之PagerAdapter中View的重用
在写PagerAdapter的时候,需要重写instantiateItem(ViewGroup container ,int position) 此方法中,将需要加载的View,添加到conta ...
- 踩石行动:ViewPager无限轮播的坑
2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...
随机推荐
- 使用Xamarin开发iOS7应用时隐藏StatusBar方法
在iOS7之前如果需要隐藏StatusBar,比较简单,直接在AppDelegate.cs中使用如下代码就可以进行隐藏: UIApplication.SharedApplication.StatusB ...
- NodeJs 开发微信公众号(五)真实环境部署
在测试环境下开发完成代表着你离正式上线的目标不远了.接下来本章就主要谈一谈把测试环境的公众号升级为正式的公众号. 服务器和域名 目前为止我们只是在自己的电脑上完成了测试环境.真实的线上环境当然需要自己 ...
- 页面与ViewModel(下)
在上一篇博客中,笔者分享了一些从页面整体的角度对页面与ViewModel的思考.在本文中笔者希望从相对细节的角度分享一些对页面与ViewModel的思考. 比如,当我们在更新View Model中的绑 ...
- 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码
不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...
- CSharpGL(17)重构CSharpGL
CSharpGL(17)重构CSharpGL CSharpGL用起来我自己都觉得繁琐了,这是到了重构的时候. 下载 CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入(https ...
- Vue ES6 Jade Scss Webpack Gulp
一直以来非常庆幸曾经有翻过<代码大全2>:这使我崎岖编程之路少了很多不必要的坎坷.它在软件工艺的话题中有写到一篇:"首先是为人写程序,其次才是机器(Write Programs ...
- Python开发环境配置
好久没有写博客了,自从6月份毕业后,进入一家做书法.字画文化宣传的互联网公司(www.manyiaby.com),这段时间一直在进行前端开发,对于后端的使用很少了,整天都是什么html.css.jav ...
- 原生Ajax总结
HTTP协议 传统的请求和Ajax请求 Ajax定义 Asynchronous JavaScript and XML. Ajax异步的,JavaScript程序希望与服务器直接通信而不需要重新加载页面 ...
- Android开发之Activity的创建跳转及传值
在Android系统的江湖中有四大组件:活动(Activity), 服务(Service), 广播接收器(Broadcast Reciver)和内容提供者(Content Provider).今天所介 ...
- JQuery 加载 CSS、JS 文件
JS 方式加载 CSS.JS 文件: //加载 css 文件 function includeCss(filename) { var head = document.getElementsByTagN ...