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 ...
随机推荐
- keil应用小贴士:Use MicroLIB是干什么的
在keil 建立ARM的工程时,其中有一项是选 use MicroLIB 查了查,得到了以下信息: microlib 是缺省 C 库的备选库. 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使 ...
- [SDOI2016]储能表
Description 有一个 n 行 m 列的表格,行从 0 到 n−1 编号,列从 0 到 m−1 编号.每个格子都储存着能量.最初,第 i 行第 j 列的格子储存着 (i xor j) 点能量. ...
- [APIO2016]划艇
题目描述 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着 NNN 个划艇学校,编号依次为 111 到 NNN.每个学校都拥有若干艘划艇.同一所学校的所有划艇颜色相同,不同的学校的划艇 ...
- 神在夏至祭降下了神谕(oracle)
首先这道题样例很多,先一个一个看 我们发现k为奇数是必为winter,其实可以证明 k为奇数时,k=a+(a+1)意味着可以直接实现winter士兵+1,summer士兵-1 k为偶数时,显然当m也为 ...
- bzoj 5290: [Hnoi2018]道路
Description Solution PJDP毁青春 注意到性质:到根的道路不超过 \(40\) 条 所以我们只关系一个点上面的道路的情况就行了 设 \(f[x][i][j]\) 表示一个点 \( ...
- ●BZOJ 4310 跳蚤
●赘述题目 给出一个字符串,要求分成k个子串,然后求出每个子串的字典序最大的子串(我称它为子子串),要使这k个子子串中的字典序最大的那个串(即魔力串)最小.输出该魔力串. (本题个人感觉很好,比较综合 ...
- 【Tensorflow系列】使用Inception_resnet_v2训练自己的数据集并用Tensorboard监控
[写在前面] 用Tensorflow(TF)已实现好的卷积神经网络(CNN)模型来训练自己的数据集,验证目前较成熟模型在不同数据集上的准确度,如Inception_V3, VGG16,Inceptio ...
- Mysql参数汇总
凡是需要耐心. 参数为静态参数则黄色字体标记. 参数为全局变量则粗体标记. 参数为全局.会话变量则不标记. auto_increment_increment auto_increment_offset ...
- 移动端开发,文字增加,字体自动放大(font boosting)
问题缘由:做文章详情页的时候,文字多了一点字体就放大了,真的是奇了怪了. 问题重现 一段文字的时候 两段文字的时候 很明显,字体放大了很多. 疑点 meta标签缩放的问题 最近正好遇到处理retain ...
- c#默认类的修饰符。
类的默认修饰符是internal 当其修饰符为internal时,其他模块不能访问该类, 所以class类的修饰符一般为public