Android初级教程:ViewPage使用详解
转载本博客,请注明出处:http://blog.csdn.net/qq_32059827点击打开链接
ViewPage使用之一就是轮播广告,就以此为出发点,来详细解析一下ViewPage的使用和加载机制。
首先直接上一个damo,在代码中我也直接给出了详细的解释。然后,再在案例后边,对加载机制做一个解释。
Demo:
首先,配置文件:(注意引入全类名)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" > <android.support.v4.view.ViewPager
android:id="@+id/viewPage"
android:layout_width="match_parent"
android:layout_height="200dip" >
</android.support.v4.view.ViewPager> </RelativeLayout>
mainactivity活动代码:
package com.itydl.viewpage; import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.app.Activity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType; public class MainActivity extends Activity { //数据源
List<ImageView> mImageViewLists = new ArrayList<ImageView>();
//准备数据,图片资源(一般来自服务器端)
int[] imagsIds = {
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e
}; private ViewPager mViewPager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();//初始化界面
initDatas();//初始化数据 } private void initDatas() {
// 往集合里面添加Imageview对象
ImageView iv =null;
for(int i =0;i<imagsIds.length;i++){
iv = new ImageView(this);
iv.setImageResource(imagsIds[i]);
//强制要求图片matchparent
iv.setScaleType(ScaleType.FIT_XY);
//这样集合中就存在了5个ImageView对象
mImageViewLists.add(iv);
}
} private void initView() {
setContentView(R.layout.activity_main);
//获取viewpage实例
mViewPager = (ViewPager) findViewById(R.id.viewPage); //PagerAdapter关联ViewPager,数据源间接绑定到ViewPager
mViewPager.setAdapter(new MyAdapter());
} private class MyAdapter extends PagerAdapter{ @Override
public int getCount() {
// TODO Auto-generated method stub
return mImageViewLists.size();
} /**
* (看得见的view)
* 为true的时候,复用View对象显示选中的;false时,可能显示左右加载的(看往那边拖拽)
* view 当手指开始滑动时,被拖拽的View对象
* obj 当前被选中的item。
* 这个方法会决定哪个View加载进来,只有当前选中的view与当前的item相同时才会显示当前的view
*/
@Override
public boolean isViewFromObject(View view, Object object) {
// TODO Auto-generated method stub
return view == object;
} /**(看不见的view)
* 销毁对应position位置的item(默认加载三张,三张外的之前先被加载的view就会被销毁,传递过来的position等于那个销毁的position)
* container 就是当前创建的ViewPager
* object: 标记。预销毁的view会传递到这里
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//下边这行代码是个坑——不可以保留,一定要注销掉才可以使用,如果不注销掉,抛出异常。
//super.destroyItem(container, position, object);
// 移除掉ViewPager中position的item对象
container.removeView((ImageView) object);
} /**(看不见的view)
* 预加载时调用,默认加载三张;当前显示一view,会预加载后边马上要显示的位置的那张view
* 加载对应position位置的item
* object: 标记。预加载的view会传递给这里
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
// 把position位置的对象加载出来,并且添加到ViewPager中
ImageView iv = mImageViewLists.get(position);
//Adds a child view. 向ViewPager中添加ImageView对象
container.addView(iv);
return iv;//返回显示
} }
}
详细的代码解释如上,现在运行看看结果:
看来效果还不错,那么就紧跟脚步,把结论写在了一张图片上,那么就用一张图片来解释一下ViewPage是怎么加载的:
现在对ViewPage用法应该是比较清楚了,您可以自己加上log日志,验证上边图片总结的内容哦。
个人水平总有限,有更好的解释方式还望您的指正。
欢迎关注本博客点击打开链接 http://blog.csdn.net/qq_32059827,每天花上5分钟,阅读一篇有趣的安卓小文哦。
Android初级教程:ViewPage使用详解的更多相关文章
- Android初级教程启动定时器详解
本案例知识是:后台执行定时任务. Alarm机制: 一.创建LongRunningService类 package com.example.servicebestpractice; import ja ...
- Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!
Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Android图片缓存之Bitmap详解
前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...
- Android Design Support Library使用详解
Android Design Support Library使用详解 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的And ...
- Android 之窗口小部件详解--App Widget
Android 之窗口小部件详解--App Widget 版本号 说明 作者 日期 1.0 添加App Widge介绍和示例 Sky Wang 2013/06/27 1 App ...
- Android不规则点击区域详解
Android不规则点击区域详解 摘要 今天要和大家分享的是Android不规则点击区域,准确说是在视觉上不规则的图像点击响应区域分发. 其实这个问题比较简单,对于很多人来说根本不值得做为一篇博文写出 ...
- [Android新手区] SQLite 操作详解--SQL语法
该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法 :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...
- Android中Service的使用详解和注意点(LocalService)
Android中Service的使用详解和注意点(LocalService) 原文地址 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalServ ...
随机推荐
- [ZJOI 2012]灾难
Description 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的生态灾难. 学过生 ...
- ●POJ 3378 Crazy Thairs
题链: http://poj.org/problem?id=3378 题解: 树状数组维护,高精度. 依次考虑以每个位置结尾可以造成的贡献. 假设当前位置为i,为了达到5个元素的要求,我们需要求出,在 ...
- poj 2104 主席树(区间第k大)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 44940 Accepted: 14946 Ca ...
- [bzoj4873]寿司餐厅
来自FallDream的博客,未经允许,请勿转载,谢谢. Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个代号ai和美味度di,i,不同种类的 ...
- 新版Eclipse打开jsp、js等为文本编辑,没有JSP Editor插件问题
刚从官网下载安装的Eclipse Java Oxygen.2但是打开的jsp文件尽然默认文本编辑器打开,就js文件也是一样,纳闷! 网上搜索一番,原来缺少web开发相关工具, 下面给插件安装方法: 1 ...
- Python【第一课】 Python简介和基础
本节内容 Python安装(windows) 第一个程序(windows中的python) 变量 字符编码 注释 用户输入 模块初步认识 数据类型 数据运算 表达式if...else 表达式for l ...
- 谈谈如何选择合适的MySQL数据类型
MySQL数据类型选择 一 .选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更 ...
- 利用maven打jar包(项目来自GitHub)
1.首先去GitHub上clone一个项目.(前提,maven项目) 2.切换到项目根目录. 3.执行mvn package. 第一次操作失败: 分析错误原因(javac):maven无法找到jdk, ...
- HashSet与TreeSet
1.TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值 2.HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个nu ...
- IOS charles抓包HTTP
charles通常用来截取本地的网络封包,但也可以用它来截取其他设备上的网络请求.本篇以IOS为例,讲解如何进行相应的操作. 1.charles上的设置 要截取iphone上的网络请求,我们要先将ch ...