Android Viewpager+Fragment实现滑动标签页
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实现滑动标签页的更多相关文章
- ViewPager + Fragment实现滑动标签页
http://blog.csdn.net/lizhenmingdirk/article/details/13631813; tab与frg的区别: http://www.cnblogs.com/tia ...
- Android ViewPager + Fragment实现滑动页面
效果: PagerData类: package com.cloud.viewpagerdemo; import java.io.Serializable; class PagerData implem ...
- 【Android进阶】使用Andbase快速开发框架实现常见侧滑栏和滑动标签页组合效果
最近闲来无事,在网上寻找源代码看,突然发现了一个国内技术牛人开发的快速开发框架Andbase,花了一天时间研究了下源码和怎么使用,现将开发常见的侧滑栏和滑动标签页组合效果的使用介绍个大家,希望可以减少 ...
- Android ViewPager Fragment使用懒加载提升性能
Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...
- Android ViewPager 打造炫酷欢迎页
Android ViewPager 打造炫酷欢迎页 ViewPager是Android扩展v4包中的类,这个类可以让用户切换当前的View.对于这个类的应用场景,稍加修改就可以应用到多个环境下.比如: ...
- Android - ViewPager+Fragment初始化问题
Android应用开发中,经常会用到ViewPager + Fragment,虽然效果不错,但随之而来的还有一些问题,下面就说说其中的初始化问题. ViewPager初始化时会预加载前后的2个页面,即 ...
- 安卓开发之使用viewpager+fragment实现滚动tab页
闲着.用viewpager+fragment实现了个滚动tab..轻拍,以后会陆续发先小东西出来..爱分享,才快乐.demo见附件.. package com.example.demo; import ...
- ActionBar+Fragment实现顶部标签页
用ActionBar的TABS模式,和Fragment实现程序顶部的标签页切换. 一. MainActivity public class MainActivity extends A ...
- Android ViewPager + Fragment的布局
ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html ...
随机推荐
- 监督学习——随机梯度下降算法(sgd)和批梯度下降算法(bgd)
线性回归 首先要明白什么是回归.回归的目的是通过几个已知数据来预测另一个数值型数据的目标值. 假设特征和结果满足线性关系,即满足一个计算公式h(x),这个公式的自变量就是已知的数据x,函数值h(x)就 ...
- 【java排序】 归并排序算法、堆排序算法
一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ...
- Postman—命令执行脚本及生成报告
前言 前面的应用中,都是在postman图形界面工具里面进行测试,但是有时候我们需要把测试脚本集成到CI平台,或者在非图形界面的系统环境下进行测试,那么我们该如果处理呢 通过newman来执行post ...
- Eclipse *版本(图文详解)
不多说,直接上干货! 关于Eclipse的版本介绍 Eclipse Standard 该版本是eclipse最基础的版本,适合Java se个人开发者.或希望根据自己需求配置插件的开发者使用. Ecl ...
- Ruby on Rails Mountable vs. Full Engine
原文 :https://www.travisluong.com/ruby-on-rails-mountable-vs-full-engine/一个Rails Engine 本质是一个 Rails ap ...
- Kubernetes+Flannel 环境中部署HBase集群
2015-12-14注:加入新节点不更改运行节点参数需求已满足,将在后续文章中陆续总结. 注:目前方案不满足加入新节点(master节点或regionserver节点)而不更改已运行节点的参数的需求, ...
- Linux笔记:vi常用命令
vi编辑器是所有Unix及Linux系统下标准的编辑器,在很多时候我们都需要使用vi修改服务端配置,vi其实非常强大,只要命令使用熟练的情况下,编辑速度并不亚于现在的图形化编辑器,这里简单地介绍一下它 ...
- plt绘制 2维、3维散点图
# 3维import numpy as np import matplotlib.pyplot as plt from sklearn.datasets.samples_generator impor ...
- highcharts绘制股票k线
借助highcharts绘制股票k线: 后台通过websocket没个一定时间下发最新数据,然后重新绘制k线; 开发文档: https://api.highcharts.com/highcharts/ ...
- awk 统计文件中按照某列统计某列的和(sum)
把第一列相同的名称的第二列加起来: [root@localhost cc]# cat 1.txtaaa 10 bbb 20aaa 30ccc 40ccc 20ccc 40 [root@localhos ...