Android技术——切换视图(两)随着ViewPage达到Tab幻灯片浏览
2015-09-30 19:01
483 查看
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 后的效果:
![](http://img.blog.csdn.net/20150318104835835?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWW9uZ1l1X0lU/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
正在从第一个美女向第二个美女滑动中。
一、早期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中postDelayed方法的讲解
- 20那天android得知
- Android性能专项测试之TraceView工具(Device Monitor)
- Android Socket编程实例
- Android通话记录过滤和监听
- 如何获得android手机通讯录的字母显示(两)
- Android开发中的小技巧
- android四大组件之Service个人总结
- Js调用android方法
- Kotlin学习
- Android中ImageView的缩放(scaleType)类型
- [转]Android:布局实例之模仿QQ登录界面
- Android Animation 动画解析
- android usb挂载分析---MountService启动
- Android通用标题栏
- android 文件上传
- android从应用到驱动之—camera(1)---程序调用流程[转]
- 使用Android Lint来改善你的代码
- android 设计日历表头的算法
- Android基础入门教程——2.5.5 PopupWindow(悬浮框)的基本使用