从零开始用好ViewPager(1)

来源:互联网 发布:简单php发送post请求 编辑:程序博客网 时间:2024/06/06 02:40

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">大家好!这是本博客的第一篇文章,我会由浅入深把内容讲清楚,也希望大家喜欢!</span>

一、  初识ViewPager

ViewPager是谷歌在“android-support-v4.jar”支持包中新引入的一个控件。“android-support-v4.jar”主要为早期版本兼容android api4(android 1.6) 及以后的新版本提供支持,但也附带,而且是唯一的引入了ViewPager这个新控件,连谷歌的工程师也自嘲,这个控件也许应该移到widget控件包里:“at some point should be moved over to the widget package”,因此,它和我们常用的ImageView、TextView等控件有同等的重要性,是设计界面的好工具。

ViewPager控件是什么样的呢?它可以让用户通过左右滑动屏幕,在不同的页面之间流畅的切换。示意图如下:


当然,如果滑动距离太小,页面会弹回去,效果和现在大家使用UC浏览器左右翻页一样,感觉很棒吧?下面我们就来看一个使用ViewPager控件的简单例子。

二、ViewPager的简单实现

第一步,在布局文件中增加ViewPager控件,这里要注意使用控件的全名“android.support.v4.view.ViewPager”,否则会在载入控件时报错:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

   xmlns:tools="http://schemas.android.com/tools"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

    tools:context="com.example.viewpagertest.MainActivity"

    android:orientation="vertical">

 

    <android.support.v4.view.ViewPager

        android:id="@+id/view_pager"

       android:layout_width="match_parent"

          android:layout_height="match_parent"/>

       

 

</LinearLayout>


第二步,更改主活动,使它继承自FragmentActivity,这样才能使用v4扩展包:

public class MainActivity extends FragmentActivity {private TestPagerAdapter testPagerAdapter;private FragmentManager supportFragmentManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}

第三步,在主活动中加载ViewPager控件:

public class MainActivity extends FragmentActivity {private TestPagerAdapter testPagerAdapter;private FragmentManager supportFragmentManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);supportFragmentManager = getSupportFragmentManager();testPagerAdapter = new TestPagerAdapter(supportFragmentManager);viewPager.setAdapter(testPagerAdapter);}}

第四步,为ViewPager控件写一个适配器,大多数情况下这个适配器可以继承自FragmentPagerAdapter,如果需要展示很多页面,可以选择继承自FragmentStatePagerAdapter以减少占用的内存。代码如下:

public class TestPagerAdapter extends FragmentPagerAdapter {public TestPagerAdapter(FragmentManager fragmentManager) {super(fragmentManager);}@Overridepublic Fragment getItem(int position) {return new MyFragment();}@Overridepublic int getCount() {return 3;}}

重写getItem(int position)和getCount()两个方法。前者用来载入指定位置的View视图,载入的不是当前显示给用户的视图,而是即将显示的后一个视图,即预加载视图;后者返回整个ViewPager控件中包含的View视图的数量,这里我们设定为3。

第五步,设计一个背景颜色随机改变的碎片,作为getItem方法的返回值:

public class MyFragment extends Fragment {private Random random = new Random();@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.my_fragment, null);ImageView imageView = (ImageView) view.findViewById(R.id.image_view);imageView.setBackgroundColor(Color.argb(Color.alpha(0xFF000000),Color.red(random.nextInt()), Color.green(random.nextInt()), Color.blue(random.nextInt())));return view;}}

好了,经过以上步骤相信你已经实现了ViewPager,而且通过来回滑动屏幕你应该能发现,ViewPager预加载的是滑动方向上的下一个视图VIew,因此中间那个碎片始终不会变色,而在两个碎片间来回滑动也不会触发预加载。

下一篇内容我们将继续深入解析ViewPager。







0 0
原创粉丝点击