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 ...
随机推荐
- no zuo no die
#include <iostream> #include <cstring> #include <cstdio> using namespace std; name ...
- [BeiJing2011]元素
Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石. 一般地,矿石越多则法力 ...
- ●BZOJ 1853 [Scoi2010]幸运数字
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1853 题解: 容斥原理,暴力搜索,剪枝(这剪枝剪得真玄学) 首先容易发现,幸运号码不超过 2 ...
- 使用PL/SQL Developer连接远程DB(本机不安装Oracle客户端)
本文内容亲测可行环境: 服务端:centos6.7 ,oracle 11g r2 ,动态注册,监听端口号:1521 用户端:win7 ,没有安装ORACLE及其客户端 准备文件:plsql ...
- django-rest-framework 注意事项
注意事项: 在使用django rest framework时候由于网上资料太多,出现了 由一下两个函数导致的问题: from django.views.decorators.csrf import ...
- I/O控制的主要功能
主要功能: 1. 解释用户的I/O系统调用.将用户I/O系统调用转换为I/O控制模块认识的命令模式. 2. 设备驱动.根据得到的I/O命令,启动物理设备完成指定的I/O操作. 3. 中断处理.对 ...
- 笔记13 AOP中After和AfterReturning的区别
AOP中 @Before @After @AfterThrowing@AfterReturning的执行顺序 public Object invoke(Object proxy, Method met ...
- day4 liaoxuefeng--调试、线程、正则表达式
一.错误.调试和测试 二.进程和线程 三.正则表达式
- VC++6.0连接MySQL数据库(MySQL API)
一.MySQL的安装 Mysql的安装去官网下载就可以...最新的是5.7版本..二.VC6.0的设置(1)打开VC6.中选0 工具栏Tools菜单下的Options选项,在Directories ...
- CSS缩写的样式
熟悉和了解CSS的朋友都知道,CSS样式表有很多缩写方式.比如,定义字体.定义背景等,都可以把CSS代码缩写到一行.为了能更好的搞清楚CSS缩写方法,我收集整理了一些有关CSS简写的参考资料,也是对自 ...