Android技术——切换视图(两)随着ViewPage达到Tab幻灯片浏览
Android技术——切换视图(一)~(四)在资源项目:https://github.com/YongYuIT/MeiNv_Liulanqi
一、早期android(android.support.v4)提供了一系列支持Fragment滑动切换的类。主要是:
1、ViewPager:它时Fragment容器,能够同一时候管理多个Fragment,并同意多个Fragment切换时提供动画效果。
2、FragmentPagerAdapter:Adapter类。用于为ViewPager提供多个Fragment。此类通常须要扩展。
3、PagerTitleStrip:与ViewPager结合使用,用于在ViewPager上显示“导航条”。
二、借助ViewPage实现Tab滑动导航的过程例如以下:
step1:扩展得到自己的FragmentPagerAdapter
step2:扩展得到自己的SimpleOnPageChangeListener。这个主要时在ViewPager滑动选择时候被触发。因此在这里面一般是放置切换Fragment的代码。
step3:向ViewPager加入自己的FragmentPagerAdapter和自己的SimpleOnPageChangeListener。
示比例如以下:
(本项目是在上文“Android技术——滑动切换(一)实现Tab导航”项目基础上加入而来)
/MeiNv_Liulanqi/src/com/example/meinv_liulanqi/MeiNvFragment_V4.java文件(事实上这个类和上文中的MeiNvFragment的内容一模一样。仅仅是MeiNvFragment_V4是继承自android.support.v4.app.Fragment而已)
package com.example.tab_nav;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class MeiNvFragment_V4 extends Fragment
{
public static int[] img_ids;
public static String Fragment_Key = "Fragment_Key";
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.fragment_layout, null);
ImageView img_meinv = (ImageView) v.findViewById(R.id.img_meinv);
// 获取创建该Fragment时传入的參数Bundle
Bundle args = getArguments();
img_meinv.setImageResource(img_ids[args.getInt(Fragment_Key)]);
return v;
}
}
/MeiNv_Liulanqi/src/com/example/meinv_liulanqi/ViewPagerActivity.java文件:
package com.example.tab_nav;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.SimpleOnPageChangeListener;
public class ViewPagerActivity extends FragmentActivity
// 因为FragmentPagerAdapter仅仅在android.support.v4中定义
// 而android.support.v4.app.FragmentActivity的实例化须要传入android.support.v4.app.FragmentManager。
// 这个特殊的FragmentManager仅仅能通过FragmentActivity的getSupportFragmentManager方法得到,
// 所以ViewPagerActivity必须继承android.support.v4.app.FragmentActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager);
MeiNvFragment_V4.img_ids = new int[] { R.drawable.linzhiling,
R.drawable.liuyan, R.drawable.yangmi };
ViewPager pager = (ViewPager) findViewById(R.id.pager);
// 为ViewPager加入FragmentPagerAdapter
myFragmentPagerAdapter adapter = new myFragmentPagerAdapter(
getSupportFragmentManager());
pager.setAdapter(adapter);
// 为ViewPager加入事件监听器
mySimpleOnPageChangeListener listener = new mySimpleOnPageChangeListener(
pager);
pager.setOnPageChangeListener(listener);
}
// 扩展得到自己的FragmentPagerAdapter
class myFragmentPagerAdapter extends FragmentPagerAdapter
{
public myFragmentPagerAdapter(FragmentManager fm)
{
super(fm);
// TODO Auto-generated constructor stub
}
// 获取指定位置的Fragment
@Override
public Fragment getItem(int arg0)
{
Fragment f = new MeiNvFragment_V4();
Bundle b = new Bundle();
b.putInt(MeiNvFragment.Fragment_Key, arg0);
f.setArguments(b);
return f;
}
// 指出该Adapter包括Fragment的数目
@Override
public int getCount()
{
// TODO Auto-generated method stub
return MeiNvFragment_V4.img_ids.length;
}
@Override
public CharSequence getPageTitle(int position)
{
return "第" + (position + 1) + "个美女";
}
}
// 扩展得到自己的SimpleOnPageChangeListener
class mySimpleOnPageChangeListener extends SimpleOnPageChangeListener
{
private ViewPager pager;
public mySimpleOnPageChangeListener(ViewPager p)
{
pager = p;
}
public void onPageSelected(int position)
{
pager.setCurrentItem(position);
}
}
}
/MeiNv_Liulanqi/res/layout/activity_view_pager.xml文件:
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.PagerTitleStrip
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top" >
</android.support.v4.view.PagerTitleStrip>
</android.support.v4.view.ViewPager>
启动ViewPagerActivity 后的效果:
正在从第一个美女向第二个美女滑动中。
版权声明:本文博主原创文章。博客,未经同意不得转载。
Android技术——切换视图(两)随着ViewPage达到Tab幻灯片浏览的更多相关文章
- Android技术面试整理
前19题为常考题目!! 1.Android的四大组件是哪些,它们的作用? 2.请介绍下Android中常用的五种布局. 3.android中的动画有哪几类,它们的特点和区别是什么 4.android ...
- android技术总结
1.要做一个尽可能流畅的ListView,你平时在工作中如何进行优化的? ①Item布局,层级越少越好,使用hierarchyview工具查看优化. ②复用convertView ③使用ViewHol ...
- android 语言切换过程分析
android 语言切换过程分析 2014-02-27 18:13 1207人阅读 评论(0) 收藏 举报 语言切换android语言切换android改变语言 最近在看一个bug,系统切换语言后,本 ...
- iOS开发:使用Tab Bar切换视图
iOS开发:使用Tab Bar切换视图 上一篇文章提到了多视图程序中各个视图之间的切换,用的Tool Bar,说白了还是根据触发事件使用代码改变Root View Controller中的Conten ...
- Android 更新UI的两个方法
Android 更新UI的两个方法 在Android的开发过程中,常常需要适时的更新UI.Androd中的UI是在主线程中更新的.如果在主线程之外的线程中直接更新,就会出现报错并抛出异常: andro ...
- ANDROID自己定义视图——onLayout源代码 流程 思路具体解释
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简单介绍: 在自己定义view的时候.事实上非常easy.仅仅须要知道3步骤: 1.測量- ...
- 【新版】Android技术博客精华汇总
[新版]Android技术博客精华汇总(原文链接内持续更新) http://www.apkbus.com/thread-313856-1-1.html Kotlin Kotlin学习资料汇总 http ...
- Android技术分享-文字转语音并朗读
Android技术分享-文字转语音并朗读 最近在做一个项目,其中有一个功能是需要将文本转换成语音并播放出来.下面我将我的做法分享一下. 非常令人开心的是,Android系统目前已经集成了TTS,提供了 ...
- [FMX]将 Android 程序切换到后台及从后台切换到前台实现
有时候,我们需要将自己的Android程序切换到后台运行,在必要时,将其切换到前台运行.下面提供了一种实现方式,首先需要引用三个单元: 1 uses Androidapi.JNI.App,Andr ...
随机推荐
- 经常使用vi编辑命令
进入 vi 该命令 vi filename :打开或新建文件.在第一行和第一光标 vi +n filename :打开文件,并将光标置于第 n 行首 vi + filename :打开文件,并将 ...
- C/S与B/S谁与争锋之我见
看到网上有些人在讨论C/S架构和B/S架构以及它们的发展趋势,后起之秀B/S是否真将取代C/S而存在?在发表我的观点之前,我们先来一起来回顾下C/S以及B/S. 一C/S 1.C/S概念 C/S是Cl ...
- 【甘道夫】Win7x64环境下编译Apache Hadoop2.2.0的Eclipse小工具
目标: 编译Apache Hadoop2.2.0在win7x64环境下的Eclipse插件 环境: win7x64家庭普通版 eclipse-jee-kepler-SR1-win32-x86_64.z ...
- unity3d由于Camera.main.transform报空引用错误的解决方案
今天在导入character包后,引用了内置的第三人称素材,但是在启动的时候程序报空引用的错误: 引起错误的位置在: 错误原因是因为没有将摄像机的tag设置为maincamera,改为maincame ...
- 用XAML做网页!!—终结篇
原文:用XAML做网页!!-终结篇 迄今为止的设计都很顺利,但这次就不得不接触我前面所说的非常糟糕的流文档了,但在此之前先来把标题弄好: <Border BorderBrush="#6 ...
- PHP socket类
没事的时候自己封装了一个socket类 功能非常easy和curl功能是一样的 class socketClass{ private $host; private $url; private $err ...
- 在Amazon AWS RHEL 7上安装 配置PPTP VPN
0 前言 0.1 为什么需要VPN? 国内的VPN不是必须,但是国外的VPN是很有用的.连接到国外的VPN服务器之后就可以访问Google,Facebook, Youtube等网站,没有Google的 ...
- 辛星解读为什么PHP须要模板
近期有个人问我:为什么PHP须要模板呢?整个站点的编写都是我一个人完毕的,从前端到后端,都是这样,我一个人写站点是不是就不须要模板了呢?我当时还真给问住了,也没想好非常合适的回答它的方式,于是就随便说 ...
- ExtJs自学教程(1):从一切API开始
称号 记得 本系列文章是不是引进全套焦点ExtJs使用,您只需专注于解决ExtJs思考问题.人们不写长篇大论.别人能学会自立.l 有些人只要学会CSS的javascript对于英文不至于很蹩脚(以辅 ...
- hdu1869六度分离,spfa实现求最短路
就是给一个图.假设随意两点之间的距离都不超过7则输出Yes,否则 输出No. 因为之前没写过spfa,无聊的试了一下. 大概说下我对spfa实现的理解. 因为它是bellmanford的优化. 所以之 ...