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 ...
随机推荐
- 微信小程序自定义弹窗wcPop插件|仿微信弹窗样式
微信小程序自定义组件弹窗wcPop|小程序消息提示框|toast自定义模板弹窗 平时在开发小程序的时候,弹窗应用场景还是蛮广泛的,但是微信官方提供的弹窗比较有局限性,不能自定义修改.这个时候首先想到的 ...
- 神策Loagent数据收集 windows部署的坑
部署可以修改bin文件夹下的bat文件.. java改为javaw..无窗口运行 重新启动的时候..要保证上次运行到的日志文件要还在..或者同名文件.. 保证要比之前的文件大些..所以最好是之前的文件 ...
- (转)Mysql 索引原理及优化
本文内容主要来源于互联网上主流文章,只是按照个人理解稍作整合,后面附有参考链接. 一.摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引 ...
- hbase集群中其中某个regionserver 没有启动
第一步: date命令查看各个机器的时间 发现linux02机器时间差了2个多小时 第二步:ntpdate pool.ntp.org 修改错误时间的机器 第三步: 重启 hbase
- HUE配置文件hue.ini 的yarn_clusters模块详解(图文详解)(分HA集群和非HA集群)
不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...
- 关于作用域范围Scope
举个例子,如下: public class C { public int a = 2; public void test(int b) { int c = 3; for (int d = 3; a & ...
- Django的视图系统
视图(views)概述 在前几篇文章中介绍了,client端通过http请求——去url的路由找到相应的视图函数——触发视图函数——再去modes取数据——取到数据后——再通过创建模——views函数 ...
- 用css实现在横线中间插入文字
在一些登录或者注册界面中常常可看到,一个大框框上面的横线中有插入文字,大概示意图如下: 这种现象其实是相对位置作用的结果,可以通过相对定位,是某元素恰好出现在div的边框上. position: re ...
- java序列化测试
0.前言 本文主要对几种常见Java序列化方式进行实现.包括Java原生以流的方法进行的序列化.Json序列化.FastJson序列化.Protobuff序列化. 1.Java原生序列化 Java原生 ...
- Ceph 存储集群 - 存储池
目录 一.存储池介绍 二.存储池命令 1. 列出存储池 2. 创建存储池 3. 设置存储池配额 4. 删除存储池 5. 重命名存储池 6. 查看存储池统计信息 7. 生成存储池快照 8. 删除存储池快 ...