• Android中ViewPager的总结


         ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view。

    1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。

    2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。

    3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

        在编写ViewPager的应用的使用,还需要使用两个组件类分别是PagerTitleStrip类和PagerTabStrip类,PagerTitleStrip类直接继承自ViewGroup类,而PagerTabStrip类继承PagerTitleStrip类,所以这两个类也是容器类。但是有一点需要注意,在定义XML的layout的时候,这两个类必须是ViewPager标签的子标签,不然会出错。

    layout.xml:

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     tools:context=".MainActivity" >
     6 
     7     <android.support.v4.view.ViewPager
     8         android:id="@+id/viewpager"
     9         android:layout_width="wrap_content"
    10         android:layout_height="wrap_content" >
    11 
    12         <android.support.v4.view.PagerTabStrip
    13             android:id="@+id/tabstrip"
    14             android:layout_width="wrap_content"
    15             android:layout_height="50dip"
    16             android:gravity="center" />
    17     </android.support.v4.view.ViewPager>
    18 
    19 </RelativeLayout>

    MainActivity.java:

      1 package com.example.android_viewpager1;
      2 
      3 import java.util.ArrayList;
      4 
      5 import android.annotation.SuppressLint;
      6 import android.app.Activity;
      7 import android.os.Bundle;
      8 import android.support.v4.view.PagerAdapter;
      9 import android.support.v4.view.PagerTabStrip;
     10 import android.support.v4.view.ViewPager;
     11 import android.support.v4.view.ViewPager.OnPageChangeListener;
     12 import android.util.Log;
     13 import android.view.LayoutInflater;
     14 import android.view.View;
     15 import android.view.ViewGroup;
     16 
     17 public class MainActivity extends Activity {
     18 
     19     ViewPager pager = null;
     20     PagerTabStrip tabStrip = null;
     21     ArrayList<View> viewContainter = new ArrayList<View>();
     22     ArrayList<String> titleContainer = new ArrayList<String>();
     23     public String TAG = "tag";
     24 
     25     @SuppressLint("ResourceAsColor")
     26     @Override
     27     protected void onCreate(Bundle savedInstanceState) {
     28         super.onCreate(savedInstanceState);
     29         setContentView(R.layout.activity_main);
     30 
     31         pager = (ViewPager) this.findViewById(R.id.viewpager);
     32         tabStrip = (PagerTabStrip) this.findViewById(R.id.tabstrip);
     33         //取消tab下面的长横线
     34         tabStrip.setDrawFullUnderline(false);
     35         //设置tab的背景色
     36         tabStrip.setBackgroundColor(this.getResources().getColor(R.color.bg));
     37         //设置当前tab页签的下划线颜色
     38         tabStrip.setTabIndicatorColor(this.getResources().getColor(R.color.red));
     39         tabStrip.setTextSpacing(200);
     40         
     41         View view1 = LayoutInflater.from(this).inflate(R.layout.tab1, null);
     42         View view2 = LayoutInflater.from(this).inflate(R.layout.tab2, null);
     43         View view3 = LayoutInflater.from(this).inflate(R.layout.tab3, null);
     44         View view4 = LayoutInflater.from(this).inflate(R.layout.tab4, null);
     45       //viewpager开始添加view
     46         viewContainter.add(view1);
     47         viewContainter.add(view2);
     48         viewContainter.add(view3);
     49         viewContainter.add(view4);
     50       //页签项
     51         titleContainer.add("网易新闻");
     52         titleContainer.add("网易体育");
     53         titleContainer.add("网易财经");
     54         titleContainer.add("网易女人");
     55 
     56         pager.setAdapter(new PagerAdapter() {
     57 
     58             //viewpager中的组件数量
     59             @Override
     60             public int getCount() {
     61                 return viewContainter.size();
     62             }
     63           //滑动切换的时候销毁当前的组件
     64             @Override
     65             public void destroyItem(ViewGroup container, int position,
     66                     Object object) {
     67                 ((ViewPager) container).removeView(viewContainter.get(position));
     68             }
     69           //每次滑动的时候生成的组件
     70             @Override
     71             public Object instantiateItem(ViewGroup container, int position) {
     72                 ((ViewPager) container).addView(viewContainter.get(position));
     73                 return viewContainter.get(position);
     74             }
     75 
     76             @Override
     77             public boolean isViewFromObject(View arg0, Object arg1) {
     78                 return arg0 == arg1;
     79             }
     80 
     81             @Override
     82             public int getItemPosition(Object object) {
     83                 return super.getItemPosition(object);
     84             }
     85 
     86             @Override
     87             public CharSequence getPageTitle(int position) {
     88                 return titleContainer.get(position);
     89             }
     90         });
     91 
     92         pager.setOnPageChangeListener(new OnPageChangeListener() {
     93             @Override
     94             public void onPageScrollStateChanged(int arg0) {
     95                 Log.d(TAG, "--------changed:" + arg0);
     96             }
     97 
     98             @Override
     99             public void onPageScrolled(int arg0, float arg1, int arg2) {
    100                 Log.d(TAG, "-------scrolled arg0:" + arg0);
    101                 Log.d(TAG, "-------scrolled arg1:" + arg1);
    102                 Log.d(TAG, "-------scrolled arg2:" + arg2);
    103             }
    104 
    105             @Override
    106             public void onPageSelected(int arg0) {
    107                 Log.d(TAG, "------selected:" + arg0);
    108             }
    109         });
    110 
    111     }
    112 
    113 }

    实现的效果如下:

    对于PagerAdapter类,android的文档已经说的很清楚了,必须至少实现如下的4个方法,如果需要更好的扩展也可以实现更多的方法。

    public Object instantiateItem(ViewGroup container, int position)

    public void destroyItem(ViewGroup container, int position,Object object) 

    public int getCount()

    public boolean isViewFromObject(View arg0, Object arg1) 

  • 相关阅读:
    javascript 离开网页时 触发函数
    dhl:简单的WebConfig加密 连接字符加密解密
    javascript获取网页URL地址及参数等
    dhl:img 的src 在 ie7下是将全路径。>ie8和firefox没有问题
    有趣有用网址大全
    VS2010 项目引用了DLL文件,也写了Using,但是编译时提示:未能找到类型或命名空间名称
    iis6配置支持.net4.0
    闲语MVC3和Razor 转自:啊不
    dhl:4.0服务器端控件
    如何在C#中实现窗体全屏模式
  • 原文地址:https://www.cnblogs.com/baorantHome/p/5853364.html
Copyright © 2020-2023  润新知