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. Func<T,TResult>的使用方法(转载)

    public delegate TResult Func <T, TResult>(T arg) 这是一个委托方法,这个方法有一个参数T(T arg),比如int arg,string a ...

  2. C、C++基础和编程风格 (转)

    原文链接 作者:寒小阳时间:2013年8月.出处:http://blog.csdn.net/han_xiaoyang/article/details/10515417.声明:版权所有,转载请注明出处, ...

  3. 使用spring EL表达式+自定义切面封装缓存模块

    需求是这样的,业务代码需要使用到缓存功能以减少数据库压力,使用redis来实现,并且需要生成缓存的key由方法的传参拼接而成(貌似也只能这样才能保证同样的select查询可以使用缓存),简单的方式就是 ...

  4. spring websocket 和socketjs实现单聊群聊,广播的消息推送详解

    spring websocket 和socketjs实现单聊群聊,广播的消息推送详解 WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随 ...

  5. pycharm的python console报错CE.app/Contents/helpers/pydev/_pydev_bundle/pydev_ipython_console_011.py", line 87, in init self.matchers.remove(self.python_matches) ValueError: list.remove(x): x not in list

    卸载ipython pip uninstall ipython 安装ipython6.2.0 pip install ipython==6.2.0

  6. springcloud-05-ribbon中不使用eureka

    ribbon在有eureka的情况下, 可以不使用eureka, 挺简单, 直接上代码 application.xml server: port: spring: # 设置eureka中注册的名称, ...

  7. 美化checkbox多选框

    看到那些UI框架都是有美化checkbox多选框的,不过大多是图片或者是字体图标.于是就利用label仿了个多选框效果. <!DOCTYPE html> <html lang=&qu ...

  8. window.history的跳转实质-HTML5 history API 解析

    在上一浏览器跳转行为的测试中,我们看到了通过不同的方法操作浏览器跳转时,它的刷新表现有所不同,在这一文章中,将看看,为何会产生这样的不同?其背后的实质是什么?浏览器的访问历史记录到底是如何运作的呢? ...

  9. [有料组每日学习分享计划--00087]32行代码帮你导出IOS酷我音乐下载的无损音乐

    需求与研究: 1.IOS的酷我音乐软件,还是不错滴,可以直接下载APE或是320K的MP3音乐,但是我发现PC上的酷我反而没这个功能,而且其他的音乐软件一般只能下载中低品质的音乐.所以能够从IOS中找 ...

  10. T-sql 编程

    ---------------------------T-SQL编程--------------------------1.声明变量--declare @name nvarchar(50)--decl ...