Android技术——视图切换(二)借助ViewPage实现Tab滑动导航

一、早期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导航”项目基础上添加而来)

/Tab_Nav/src/com/example/tab_nav/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;

}

}

/Tab_Nav/src/com/example/tab_nav/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);

}

}

}

/Tab_Nav/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 后的效果:

正在从第一个美女向第二个美女滑动中。

时间: 2024-11-05 20:42:49

Android技术——视图切换(二)借助ViewPage实现Tab滑动导航的相关文章

Android技术——视图切换(四)“ViewSwitcher+手势识别”实现视图的滑动切换

Android技术--视图切换(一)~(四)项目的源代码在:https://github.com/YongYuIT/MeiNv_Liulanqi 上文<Android技术--视图切换(三)>实现的图片切换,虽然切换时有动画效果,但是却需要使用按钮才能切换.这个实例中,将尝试用手势识别代替按钮来实现图片切换. 这个实例也是基于前三篇文章里的项目添加而来的. /MeiNv_Liulanqi/res/layout/activity_view_switcher_huadong.xml文件: <R

Android开发--------------WebView(二)之WebView的滑动底部顶部监听,加载进度条等设置

整理一下WebView的一些常用设置,滑动监听,让跳转的页面也在WebView里显示,加载进度,获得标题等等 一,滑动监听 滑动监听的话是需要在WebView基础之上在加强一下,因为在WebView没有直接监听滑动的方法,看WebView的源码则会发现有一个 protected void onScrollChanged(int l, int t, int oldl, int oldt) : 这个方法.是受到保护的所以我们无法直接使用,所以我们写一个加强的WebView,利用接口回调. Scrol

Android典型界面设计(6)——ActionBar Tab+ViewPager+Fagment实现滑动导航

一.问题描述 在Android典型界面设计一文中,实现典型滑动导航界面,其实使用ActionBar 也可以轻松实现这一效果,甚至也可实现类似Android典型界面设计(3)的双导航效果.可见ActionBar还是比较强大的,关键要深入进去.灵活的运用,下面我们就使用ActionBar实现如图所示的效果: 二.本例特点 1.  兼容低版本 2. 使用ActionBar 分体设计(split) 3. Tab使用自定义View 4. 结合ViewPager实现滑动导航 三.代码讲解: 1.在项目中加入

Android零基础入门第54节:视图切换组件ViewSwitcher

前面三期学习了ProgressBar系列组件,那本期开始一起来学习ViewAnimator组件. 一.ViewAnimator组件概述 ViewAnimator是一个基类,它继承了 FrameLayout,因此它表现出FrameLayout的特征,可以将多个View组件叠在一起. ViewAnimator额外增加的功能正如它的名字所暗示的一样,ViewAnimator可以在View切换时表现出动画效果. ViewAnimator及其子类的继承关系图如下图所示. ViewAnimator及其子类也

Android中Activity切换时共享视图元素的切换动画(4.x兼容方案)

同时发布在我的博客 点此进入 开始 上一篇讲了使用 Google 的 AppCompat-v7 来实现 Activity 切换时实现共享视图元素的切换动画.这一篇介绍两个可以兼容 4.x 的两个第三方方案. 上一篇:Android中Activity切换时共享视图元素的切换动画(5.0以上) 方案一:PreLollipopTransition 首先在 build.gradle 配置文件添加这个库依赖 dependencies { compile 'com.kogitune:pre-lollipop

从零开始学android&lt;ImageSwitcher图片切换组件.二十六.&gt;

ImageSwitcher组件的主要功能是完成图片的切换显示,例如用户在进行图片浏览的时候,可以通过按钮点击一张张的切换显示的图片,而且使用ImageSwitcher组件在每次切换的时候也可以为其增加一些动画的效果,此类定义如下: java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.FrameLayout ? android.widget.ViewAnimator ? android.wid

Android的Activity切换动画特效库SwitchLayout,视图切换动画库,媲美IOS

由于看了IOS上面很多开发者开发的APP的视图界面切换动画体验非常好,这些都是IOS自带的,但是Android的Activity等视图切换动画并没有提供原生的,所以特此写了一个可以媲美IOS视图切换动画的Android视图切换动画特效库!SwitchLayout!可以说是目前Android上第一个,也是唯一的一个强大的视图切换动画库引擎! 作者:谭东 QQ:852041173 项目开源!推荐使用jar包形式! 没有经过作者允许,不可修改项目库源码自行发布. 如果你的项目中使用了SwtichLay

Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换

一.问题描述 本系列将结合案例应用,陆续向大家介绍一些Android典型界面的设计,首先说说tab导航,导航分为一层和两层(底部区块+区域内头部导航),主要实现方案有RadioGroup+ViewPage+Fragment.Viewpager Indicator.ActionBar Tabs.FragmentTabHost+Fragment等,下面我们先采用RadioGroup+ViewPage+Fragment实现区域头部导航. 如图所示: 二.案例主要组件 1.先看一下MainActivit

android产品研发(二十二)--&gt;android实用调试技巧

转载请标明出处:一片枫叶的专栏 上一篇文章中我们讲解了android UI优化方面的知识.我们讲解了android中的include.marge.ViewStub标签,在使用这些标签时可以简化我们的布局文件,优化组件绘制流程:讲解了android中的过度绘制相关知识点,通过优化我们的App过度绘制可以提高App的UI绘制流程与性能:我们还讲解了App中一些UI优化的小tips.更多关于android UI优化方面的知识可以参考我的:android产品研发(二十一)–>android中的UI优化