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

主页布局

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <android.support.v4.view.ViewPager
android:id="@+id/taskdescribe_viewPager"
android:layout_height="0dp"
android:layout_width="fill_parent"
android:layout_weight="1"
android:flipInterval="30"
android:persistentDrawingCache="animation">
</android.support.v4.view.ViewPager> <LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:baselineAligned="false"
android:orientation="horizontal"> <LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal" > <TextView
android:id="@+id/taskdescribe_textview_guid1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/textViewSelected"
android:gravity="center"
android:text="@string/taskdescribe_describetab"
android:textColor="@color/white" /> </LinearLayout> <LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="1dp"
android:orientation="vertical" > <TextView
android:id="@+id/taskdescribe_textview_guid2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/textViewDefault"
android:gravity="center"
android:text="@string/taskdescribe_collectortab"
android:textColor="@color/white" /> </LinearLayout> <LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="1dp"
android:orientation="vertical" > <TextView
android:id="@+id/taskdescribe_textview_guid3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/textViewDefault"
android:gravity="center"
android:text="@string/taskdescribe_buildingmetertab"
android:textColor="@color/white" /> </LinearLayout> <LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="1dp"
android:orientation="vertical" > <TextView
android:id="@+id/taskdescribe_textview_guid4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/textViewDefault"
android:gravity="center"
android:text="@string/taskdescribe_usermetertab"
android:textColor="@color/white" />
</LinearLayout> </LinearLayout> </LinearLayout>

TaskDescribeActivity.java

 package cn.com.ista.pdachina.ui;

 import java.lang.reflect.Field;
import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.animation.Interpolator;
import android.widget.Scroller;
import android.widget.TextView;
import cn.com.ista.pdachina.R;
import cn.com.ista.pdachina.adapter.MyFragmentPagerAdapter;
import cn.com.ista.pdachina.app.AppContext;
import cn.com.ista.pdachina.bean.Task;
import cn.com.ista.pdachina.dao.TaskDao; public class TaskDescribeActivity extends FragmentActivity { private AppContext appContext;// 全局Context private int taskID;
private Task task; private ViewPager viewPager;
private ArrayList<Fragment> fragmentList;
private TextView tvDescribeTab, tvCollectorTab, tvBuilldingMeterTab, tvUserMeterTab;
private int tvDefaultColor, tvSelectedColor;//选中和不选中背景颜色
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO 自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_taskdescribe); appContext = (AppContext) getApplication();
initViews();
initData();
initViewPager();
} private void initViews()
{
tvDescribeTab = (TextView) findViewById(R.id.taskdescribe_textview_guid1);
tvCollectorTab = (TextView) findViewById(R.id.taskdescribe_textview_guid2);
tvBuilldingMeterTab = (TextView) findViewById(R.id.taskdescribe_textview_guid3);
tvUserMeterTab = (TextView) findViewById(R.id.taskdescribe_textview_guid4); tvDescribeTab.setOnClickListener(new textViewListener(0));
tvCollectorTab.setOnClickListener(new textViewListener(1));
tvBuilldingMeterTab.setOnClickListener(new textViewListener(2));
tvUserMeterTab.setOnClickListener(new textViewListener(3));
} private void initData()
{
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
taskID = bundle.getInt("taskID"); task = new TaskDao(appContext).getTaskById(taskID); Resources res = getResources();
tvDefaultColor = res.getColor(R.color.textViewDefault);
tvSelectedColor = res.getColor(R.color.textViewSelected);
} private class textViewListener implements View.OnClickListener
{
private int index = 0; public textViewListener(int index)
{
this.index = index;
} @Override
public void onClick(View v)
{
setBackgroundColor(index);
viewPager.setCurrentItem(index);
} }
private void setBackgroundColor(int index)
{
tvDescribeTab.setBackgroundColor(tvDefaultColor);
tvCollectorTab.setBackgroundColor(tvDefaultColor);
tvBuilldingMeterTab.setBackgroundColor(tvDefaultColor);
tvUserMeterTab.setBackgroundColor(tvDefaultColor);
switch (index) {
case 0:
tvDescribeTab.setBackgroundColor(tvSelectedColor);
break;
case 1:
tvCollectorTab.setBackgroundColor(tvSelectedColor);
break;
case 2:
tvBuilldingMeterTab.setBackgroundColor(tvSelectedColor);
break;
case 3:
tvUserMeterTab.setBackgroundColor(tvSelectedColor);
break;
}
} /*
* 初始化ViewPager
*/
private void initViewPager()
{
viewPager = (ViewPager) findViewById(R.id.taskdescribe_viewPager);
fragmentList = new ArrayList<Fragment>();
Fragment describeFragment = new TaskDescribeFragment();
Fragment collectorFragment = new CollectorFragment();
Fragment buildingMeterFragment = new BuildingMeterFragment();
Fragment userMeterFragment = new UserMeterFragment();
fragmentList.add(describeFragment);
fragmentList.add(collectorFragment);
fragmentList.add(buildingMeterFragment);
fragmentList.add(userMeterFragment); //给Viewpager设置适配器
viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList));
viewPager.setCurrentItem(0);
viewPager.addOnPageChangeListener(new MyOnPageChangeListener()); ViewPagerScroller scroller = new ViewPagerScroller(appContext);
scroller.setScrollDuration(2000);
scroller.initViewPagerScroll(viewPager);//这个是设置切换过渡时间为2秒
} public class MyOnPageChangeListener implements OnPageChangeListener
{ @Override
public void onPageScrollStateChanged(int arg0) { } @Override
public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override
public void onPageSelected(int arg0) {
setBackgroundColor(arg0);
} } /**
* ViewPager 滚动速度设置
*
*/
@SuppressLint("NewApi")
public class ViewPagerScroller extends Scroller {
private int mScrollDuration = 2000; // 滑动速度 /**
* 设置速度速度
* @param duration
*/
public void setScrollDuration(int duration){
this.mScrollDuration = duration;
} public ViewPagerScroller(Context context) {
super(context);
} public ViewPagerScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
} public ViewPagerScroller(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
} @Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, mScrollDuration);
} @Override
public void startScroll(int startX, int startY, int dx, int dy) {
super.startScroll(startX, startY, dx, dy, mScrollDuration);
} public void initViewPagerScroll(ViewPager viewPager) {
try {
Field mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
mScroller.set(viewPager, this);
} catch(Exception e) {
e.printStackTrace();
}
}
}
}

color.xml

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

MyFragmentPagerAdapter.java

 package cn.com.ista.pdachina.adapter;

 import java.util.ArrayList;

 import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter; public class MyFragmentPagerAdapter extends FragmentPagerAdapter { private ArrayList<Fragment> list; public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> list) {
super(fm);
this.list = list;
} @Override
public Fragment getItem(int arg0) {
return list.get(arg0);
} @Override
public int getCount() {
return list.size();
} }

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类似,不再贴代码

Android Viewpager+Fragment实现滑动标签页的更多相关文章

  1. ViewPager + Fragment实现滑动标签页

    http://blog.csdn.net/lizhenmingdirk/article/details/13631813; tab与frg的区别: http://www.cnblogs.com/tia ...

  2. Android ViewPager + Fragment实现滑动页面

    效果: PagerData类: package com.cloud.viewpagerdemo; import java.io.Serializable; class PagerData implem ...

  3. 【Android进阶】使用Andbase快速开发框架实现常见侧滑栏和滑动标签页组合效果

    最近闲来无事,在网上寻找源代码看,突然发现了一个国内技术牛人开发的快速开发框架Andbase,花了一天时间研究了下源码和怎么使用,现将开发常见的侧滑栏和滑动标签页组合效果的使用介绍个大家,希望可以减少 ...

  4. Android ViewPager Fragment使用懒加载提升性能

     Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...

  5. Android ViewPager 打造炫酷欢迎页

    Android ViewPager 打造炫酷欢迎页 ViewPager是Android扩展v4包中的类,这个类可以让用户切换当前的View.对于这个类的应用场景,稍加修改就可以应用到多个环境下.比如: ...

  6. Android - ViewPager+Fragment初始化问题

    Android应用开发中,经常会用到ViewPager + Fragment,虽然效果不错,但随之而来的还有一些问题,下面就说说其中的初始化问题. ViewPager初始化时会预加载前后的2个页面,即 ...

  7. 安卓开发之使用viewpager+fragment实现滚动tab页

    闲着.用viewpager+fragment实现了个滚动tab..轻拍,以后会陆续发先小东西出来..爱分享,才快乐.demo见附件.. package com.example.demo; import ...

  8. ActionBar+Fragment实现顶部标签页

    用ActionBar的TABS模式,和Fragment实现程序顶部的标签页切换. 一. MainActivity         public class MainActivity extends A ...

  9. Android ViewPager + Fragment的布局

    ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html ...

随机推荐

  1. 【Java】java运行jar时,报 java.lang.UnsupportedClassVersionError

    问题现象: java运行jar时,报 java.lang.UnsupportedClassVersionError java  -jar  main.jar -h 192.168.221.171  - ...

  2. static变量生命周期小研究

    A页面:定义一个普通类,类包含一个静态变量a,值为:111111111111111111 B页面:修改a的值为:22222222222222 C页面:用来查看a的值 1.在vs2008中,先打开B,再 ...

  3. 【数组】Maximum Subarray

    题目: Find the contiguous subarray within an array (containing at least one number) which has the larg ...

  4. 读取Java注解类型

    参考文章: (1)https://www.cnblogs.com/extjs4/p/6411507.html 关于注解第一篇 (2)https://www.cnblogs.com/extjs4/p/6 ...

  5. 一次tomcat数据乱码事件

    一次环境变量出错导致的tomcat数据乱码事件 1.1 事件起因 由于业务的调整,我们需要将在A服务器上的后台系统迁移到B服务器上的后台,我们选择在下班后进行迁移,因为那个时间点,后台系统已经几乎没有 ...

  6. dll(动态链接库)的编写

    很可能有人会困惑dll究竟是什么,又改如何编写dll呢?今天,我就记录下编写以及调用动态链接库的步骤吧. 1.启动visuanl 6.0,新建工程 dll,如上图 2.在Source File中新建一 ...

  7. Linux 文件流管理

    1. 打开/关闭文件 1). 打开文件 / fopen 作用: 打开一个文件,将其与文件流联系起来,方便后续的操作 头文件: #include <stdio.h> 函数原型: FILE * ...

  8. Oracle相关

    where 条件中使用=进行限制时,可以返回一个记录集,即可以返回多个记录集

  9. Bootstrap table 跨页全选

    此代码是针对于bootstrap table中分页的跨页全选. 以下是整个bootstrap的定义 <script type="text/javascript" src=&q ...

  10. C#将Dll嵌入到EXE

    感谢博主的方法: https://blog.csdn.net/lin381825673/article/details/39122257 我之前也看了网上的其他的方法试了都不行 第一种方法就是说用IL ...