zoukankan      html  css  js  c++  java
  • Android Viewpager+Fragment实现滑动标签页

    ViewPager 结合Fragment实现一个Activity里包含多个可滑动的标签页,每个标签页可以有独立的布局及响应。

    主页布局

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical" >
     6     
     7 
     8     <android.support.v4.view.ViewPager
     9         android:id="@+id/taskdescribe_viewPager"
    10         android:layout_height="0dp"
    11         android:layout_width="fill_parent"
    12         android:layout_weight="1"
    13         android:flipInterval="30"
    14         android:persistentDrawingCache="animation">
    15     </android.support.v4.view.ViewPager>
    16 
    17     <LinearLayout
    18         android:layout_width="match_parent"
    19         android:layout_height="50dp" 
    20         android:baselineAligned="false"
    21         android:orientation="horizontal">
    22 
    23         <LinearLayout
    24             android:layout_width="0dp"
    25             android:layout_height="match_parent"
    26             android:layout_weight="1"
    27             android:orientation="horizontal" >
    28 
    29             <TextView
    30                 android:id="@+id/taskdescribe_textview_guid1"
    31                 android:layout_width="match_parent"
    32                 android:layout_height="match_parent"
    33                 android:background="@color/textViewSelected"
    34                 android:gravity="center"
    35                 android:text="@string/taskdescribe_describetab"
    36                 android:textColor="@color/white" />
    37 
    38         </LinearLayout>
    39 
    40         <LinearLayout
    41             android:layout_width="0dp"
    42             android:layout_height="match_parent"
    43             android:layout_weight="1"
    44             android:layout_marginLeft="1dp"
    45             android:orientation="vertical" >
    46 
    47             <TextView
    48                 android:id="@+id/taskdescribe_textview_guid2"
    49                 android:layout_width="match_parent"
    50                 android:layout_height="match_parent"
    51                 android:background="@color/textViewDefault"
    52                 android:gravity="center"
    53                 android:text="@string/taskdescribe_collectortab"
    54                 android:textColor="@color/white" />
    55 
    56         </LinearLayout>
    57 
    58         <LinearLayout
    59             android:layout_width="0dp"
    60             android:layout_height="match_parent"
    61             android:layout_weight="1"
    62             android:layout_marginLeft="1dp"
    63             android:orientation="vertical" >
    64 
    65             <TextView
    66                 android:id="@+id/taskdescribe_textview_guid3"
    67                 android:layout_width="match_parent"
    68                 android:layout_height="match_parent"
    69                 android:background="@color/textViewDefault"
    70                 android:gravity="center"
    71                 android:text="@string/taskdescribe_buildingmetertab"
    72                 android:textColor="@color/white" />
    73 
    74         </LinearLayout>
    75 
    76         <LinearLayout
    77             android:layout_width="0dp"
    78             android:layout_height="match_parent"
    79             android:layout_weight="1"
    80             android:layout_marginLeft="1dp"
    81             android:orientation="vertical" >
    82             
    83             <TextView 
    84                 android:id="@+id/taskdescribe_textview_guid4" 
    85                 android:layout_width="match_parent" 
    86                 android:layout_height="match_parent" 
    87                 android:background="@color/textViewDefault" 
    88                 android:gravity="center" 
    89                 android:text="@string/taskdescribe_usermetertab"
    90                 android:textColor="@color/white" />
    91         </LinearLayout>
    92 
    93     </LinearLayout>
    94     
    95 </LinearLayout>
    96  

    TaskDescribeActivity.java

      1 package cn.com.ista.pdachina.ui;
      2 
      3 import java.lang.reflect.Field;
      4 import java.util.ArrayList;
      5 import android.annotation.SuppressLint;
      6 import android.content.Context;
      7 import android.content.Intent;
      8 import android.content.res.Resources;
      9 import android.os.Bundle;
     10 import android.support.v4.app.Fragment;
     11 import android.support.v4.app.FragmentActivity;
     12 import android.support.v4.view.ViewPager;
     13 import android.support.v4.view.ViewPager.OnPageChangeListener;
     14 import android.view.View;
     15 import android.view.animation.Interpolator;
     16 import android.widget.Scroller;
     17 import android.widget.TextView;
     18 import cn.com.ista.pdachina.R;
     19 import cn.com.ista.pdachina.adapter.MyFragmentPagerAdapter;
     20 import cn.com.ista.pdachina.app.AppContext;
     21 import cn.com.ista.pdachina.bean.Task;
     22 import cn.com.ista.pdachina.dao.TaskDao;
     23 
     24 public class TaskDescribeActivity extends FragmentActivity {
     25 
     26 
     27     private AppContext appContext;// 全局Context
     28     
     29     private int taskID;
     30     private Task task;
     31     
     32     private ViewPager viewPager;
     33     private ArrayList<Fragment> fragmentList;
     34     private TextView tvDescribeTab, tvCollectorTab, tvBuilldingMeterTab, tvUserMeterTab;
     35     private int tvDefaultColor, tvSelectedColor;//选中和不选中背景颜色
     36     @Override
     37     protected void onCreate(Bundle savedInstanceState) {
     38         // TODO 自动生成的方法存根
     39         super.onCreate(savedInstanceState);
     40         setContentView(R.layout.activity_taskdescribe);
     41         
     42         appContext = (AppContext) getApplication();
     43         initViews();
     44         initData();
     45         initViewPager();
     46     }
     47 
     48     private void initViews() 
     49     {
     50         tvDescribeTab = (TextView) findViewById(R.id.taskdescribe_textview_guid1);
     51         tvCollectorTab = (TextView) findViewById(R.id.taskdescribe_textview_guid2);
     52         tvBuilldingMeterTab = (TextView) findViewById(R.id.taskdescribe_textview_guid3);
     53         tvUserMeterTab = (TextView) findViewById(R.id.taskdescribe_textview_guid4);
     54         
     55         tvDescribeTab.setOnClickListener(new textViewListener(0));
     56         tvCollectorTab.setOnClickListener(new textViewListener(1));
     57         tvBuilldingMeterTab.setOnClickListener(new textViewListener(2));
     58         tvUserMeterTab.setOnClickListener(new textViewListener(3));
     59     }
     60 
     61     private void initData()
     62     {
     63         Intent intent = getIntent();
     64         Bundle bundle = intent.getExtras();
     65         taskID = bundle.getInt("taskID");
     66         
     67         task = new TaskDao(appContext).getTaskById(taskID);
     68         
     69         Resources res = getResources();
     70         tvDefaultColor = res.getColor(R.color.textViewDefault);
     71         tvSelectedColor = res.getColor(R.color.textViewSelected);
     72     }
     73     
     74     private class textViewListener implements View.OnClickListener
     75     {
     76         private int index = 0;
     77         
     78         public textViewListener(int index)
     79         {
     80             this.index = index;
     81         }
     82 
     83         @Override
     84         public void onClick(View v) 
     85         {
     86             setBackgroundColor(index);
     87             viewPager.setCurrentItem(index);
     88         }
     89         
     90     }
     91     private void setBackgroundColor(int index)
     92     {
     93         tvDescribeTab.setBackgroundColor(tvDefaultColor);
     94         tvCollectorTab.setBackgroundColor(tvDefaultColor);
     95         tvBuilldingMeterTab.setBackgroundColor(tvDefaultColor);
     96         tvUserMeterTab.setBackgroundColor(tvDefaultColor);
     97         switch (index) {
     98         case 0:
     99             tvDescribeTab.setBackgroundColor(tvSelectedColor);
    100             break;
    101         case 1:    
    102             tvCollectorTab.setBackgroundColor(tvSelectedColor);
    103             break;
    104         case 2:
    105             tvBuilldingMeterTab.setBackgroundColor(tvSelectedColor);
    106             break;
    107         case 3:
    108             tvUserMeterTab.setBackgroundColor(tvSelectedColor);
    109             break;
    110         }
    111     }
    112     
    113     /*
    114      * 初始化ViewPager
    115      */
    116     private void initViewPager()
    117     {
    118         viewPager = (ViewPager) findViewById(R.id.taskdescribe_viewPager);
    119         fragmentList = new ArrayList<Fragment>();
    120         Fragment describeFragment = new  TaskDescribeFragment();
    121         Fragment collectorFragment = new  CollectorFragment();
    122         Fragment buildingMeterFragment = new  BuildingMeterFragment();
    123         Fragment userMeterFragment = new  UserMeterFragment();
    124         fragmentList.add(describeFragment);
    125         fragmentList.add(collectorFragment);
    126         fragmentList.add(buildingMeterFragment);
    127         fragmentList.add(userMeterFragment);
    128         
    129         //给Viewpager设置适配器
    130         viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList));
    131         viewPager.setCurrentItem(0);
    132         viewPager.addOnPageChangeListener(new MyOnPageChangeListener());
    133         
    134         ViewPagerScroller scroller = new ViewPagerScroller(appContext);
    135         scroller.setScrollDuration(2000);
    136         scroller.initViewPagerScroll(viewPager);//这个是设置切换过渡时间为2秒
    137     }
    138     
    139     public class MyOnPageChangeListener implements OnPageChangeListener
    140     {
    141 
    142         @Override
    143         public void onPageScrollStateChanged(int arg0) {
    144             
    145         }
    146 
    147         @Override
    148         public void onPageScrolled(int arg0, float arg1, int arg2) {
    149             
    150         }
    151 
    152         @Override
    153         public void onPageSelected(int arg0) {
    154             setBackgroundColor(arg0);
    155         }
    156         
    157     }
    158     
    159     /**
    160      * ViewPager 滚动速度设置
    161      * 
    162      */
    163     @SuppressLint("NewApi")
    164     public class ViewPagerScroller extends Scroller {
    165         private int mScrollDuration = 2000; // 滑动速度
    166      
    167         /**
    168          * 设置速度速度
    169          * @param duration
    170          */
    171         public void setScrollDuration(int duration){
    172             this.mScrollDuration = duration;
    173         }
    174          
    175         public ViewPagerScroller(Context context) {
    176             super(context);
    177         }
    178      
    179         public ViewPagerScroller(Context context, Interpolator interpolator) {
    180             super(context, interpolator);
    181         }
    182      
    183         public ViewPagerScroller(Context context, Interpolator interpolator, boolean flywheel) {
    184             super(context, interpolator, flywheel);
    185         }
    186      
    187         @Override
    188         public void startScroll(int startX, int startY, int dx, int dy, int duration) {
    189             super.startScroll(startX, startY, dx, dy, mScrollDuration);
    190         }
    191      
    192         @Override
    193         public void startScroll(int startX, int startY, int dx, int dy) {
    194             super.startScroll(startX, startY, dx, dy, mScrollDuration);
    195         }
    196       
    197         public void initViewPagerScroll(ViewPager viewPager) {
    198             try {
    199                 Field mScroller = ViewPager.class.getDeclaredField("mScroller");
    200                 mScroller.setAccessible(true);
    201                 mScroller.set(viewPager, this);
    202             } catch(Exception e) {
    203                 e.printStackTrace();
    204             }
    205         }
    206     }
    207 }

    color.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <!-- TextView背景颜色 -->
        <color name="textViewDefault">#536893</color>
        <color name="textViewSelected">#0A2864</color>
    </resources>

    MyFragmentPagerAdapter.java

     1 package cn.com.ista.pdachina.adapter;
     2 
     3 import java.util.ArrayList;
     4 
     5 import android.support.v4.app.Fragment;
     6 import android.support.v4.app.FragmentManager;
     7 import android.support.v4.app.FragmentPagerAdapter;
     8 
     9 public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    10 
    11     private ArrayList<Fragment> list;
    12     
    13     public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> list) {
    14         super(fm);
    15         this.list = list;
    16     }
    17 
    18     @Override
    19     public Fragment getItem(int arg0) {
    20         return list.get(arg0);
    21     }
    22 
    23     @Override
    24     public int getCount() {
    25         return list.size();
    26     }
    27 
    28 }

    TaskDescribeFragment.java

    package cn.com.ista.pdachina.ui;
    
    import cn.com.ista.pdachina.R;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class TaskDescribeFragment extends Fragment {
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        @Override
        @Nullable
        public View onCreateView(LayoutInflater inflater,
                @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.activity_taskdescribe_describe, container, false);//关联布局文件
            return rootView;
        }
    
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
        }
    }

    其它三个Feagment与TaskDescribeFragment类似,不再贴代码

  • 相关阅读:
    使用SQL Server Management Studio操作replication时,要用机器名登录,不要用IP地址
    SQL Server Replication 总结
    SQL Server 全文索引的硬伤(转载)
    Sqlserver2008及以上使用全文索引排除干扰词 (转载)
    如何恢复VS2013代码实时校验功能
    [VS2013]如何闪开安装VS2013必须要有安装IE10的限制
    C# ASP.NET Webservice调用外部exe无效的解决方法
    nstallShield制作打包程序详解(图)
    VS报错之混合模式程序集是针对“v1.1.4322”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
    Android之悬浮窗口实现(WindowManager)
  • 原文地址:https://www.cnblogs.com/guop/p/4998322.html
Copyright © 2011-2022 走看看