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

  1. package com.example.demo;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.os.Bundle;
  5. import android.support.v4.app.Fragment;
  6. import android.support.v4.app.FragmentActivity;
  7. import android.support.v4.app.FragmentManager;
  8. import android.support.v4.app.FragmentPagerAdapter;
  9. import android.support.v4.view.ViewPager;
  10. import android.support.v4.view.ViewPager.OnPageChangeListener;
  11. import android.view.View;
  12. import android.view.View.OnClickListener;
  13. import android.widget.TextView;
  14. public class MainActivity extends FragmentActivity {
  15. private TextView chatView, address, findView;
  16. private ViewPager mViewPager;
  17. private TextView mBottomLine;
  18. private int screenWidth = 0;
  19. private int currentIndex = 0;
  20. private MyPagerAdapter myPagerAdapter;
  21. private List<Fragment> mFragmentList = new ArrayList<Fragment>();
  22. private List<String> mTitleList = new ArrayList<String>();
  23. MyFragment chatFragment;
  24. MyFragment findFragment;
  25. MyFragment addressFragment;
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.activity_main);
  30. initComponents();
  31. }
  32. private void initComponents() {
  33. this.mBottomLine = (TextView) findViewById(R.id.bottom_line);
  34. this.screenWidth = getWindowManager().getDefaultDisplay().getWidth();
  35. this.chatView = (TextView) findViewById(R.id.chat_top_info);
  36. this.findView = (TextView) findViewById(R.id.find_top_info);
  37. this.address = (TextView) findViewById(R.id.address_top_info);
  38. TopTabClickListener clickListener = new TopTabClickListener();
  39. this.chatView.setOnClickListener(clickListener);
  40. this.findView.setOnClickListener(clickListener);
  41. this.address.setOnClickListener(clickListener);
  42. this.mViewPager = (ViewPager)findViewById(R.id.viewPager);
  43. chatFragment = new MyFragment();
  44. Bundle b = new Bundle();
  45. b.putInt("index", 0);
  46. chatFragment.setArguments(b);
  47. mFragmentList.add(chatFragment);
  48. findFragment = new MyFragment();
  49. b = new Bundle();
  50. b.putInt("index", 1);
  51. findFragment.setArguments(b);
  52. mFragmentList.add(findFragment);
  53. addressFragment = new MyFragment();
  54. b = new Bundle();
  55. b.putInt("index", 2);
  56. addressFragment.setArguments(b);
  57. mFragmentList.add(addressFragment);
  58. myPagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), mFragmentList, mTitleList);
  59. mViewPager.setAdapter(myPagerAdapter);
  60. mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
  61. @Override
  62. public void onPageSelected(int index) {}
  63. @Override
  64. public void onPageScrolled(int index, float arg1, int pixes) {
  65. if(pixes != 0){
  66. mBottomLine.layout((int) ((index + arg1) * screenWidth / 3), 0, (int) ((index + 1 + arg1) * screenWidth / 3), mBottomLine.getWidth());
  67. }
  68. if (pixes == 0) {
  69. currentIndex = index;
  70. changeIndex(currentIndex);
  71. }
  72. System.out.println("the state is : " + arg1 + "   and index is " + index);
  73. }
  74. @Override
  75. public void onPageScrollStateChanged(int state) {}
  76. });
  77. }
  78. public void onLeftBtnClick(View view){
  79. this.finish();
  80. }
  81. private class TopTabClickListener implements OnClickListener{
  82. @Override
  83. public void onClick(View view) {
  84. if (view.getId() == chatView.getId()) {
  85. mViewPager.setCurrentItem(0);
  86. }else if(view.getId() == findView.getId()){
  87. mViewPager.setCurrentItem(1);
  88. }else{
  89. mViewPager.setCurrentItem(2);
  90. }
  91. changeIndex(mViewPager.getCurrentItem());
  92. }
  93. }
  94. private void changeIndex(int index){
  95. if(index == 0){
  96. chatView.setTextColor(getResources().getColor(R.color.green));
  97. findView.setTextColor(getResources().getColor(R.color.black));
  98. address.setTextColor(getResources().getColor(R.color.black));
  99. }else if(index == 1){
  100. findView.setTextColor(getResources().getColor(R.color.green));
  101. chatView.setTextColor(getResources().getColor(R.color.black));
  102. address.setTextColor(getResources().getColor(R.color.black));
  103. }else {
  104. address.setTextColor(getResources().getColor(R.color.green));
  105. findView.setTextColor(getResources().getColor(R.color.black));
  106. chatView.setTextColor(getResources().getColor(R.color.black));
  107. }
  108. mBottomLine.layout((int) (index * screenWidth / 3), 0, (int) ((index + 1) * screenWidth / 3), mBottomLine.getWidth());
  109. }
  110. private class MyPagerAdapter extends FragmentPagerAdapter {
  111. private List<Fragment> fragmentList;
  112. private List<String> titleList;
  113. public MyPagerAdapter(FragmentManager fm, List<Fragment> fragmentList,
  114. List<String> titleList) {
  115. super(fm);
  116. this.fragmentList = fragmentList;
  117. this.titleList = titleList;
  118. }
  119. /**
  120. * 得到每个页面
  121. */
  122. @Override
  123. public Fragment getItem(int arg0) {
  124. return (fragmentList == null || fragmentList.size() == 0) ? null
  125. : fragmentList.get(arg0);
  126. }
  127. /**
  128. * 每个页面的title
  129. */
  130. @Override
  131. public CharSequence getPageTitle(int position) {
  132. return (titleList.size() > position) ? titleList.get(position) : "";
  133. }
  134. @Override
  135. public int getCount() {
  136. return fragmentList == null ? 0 : fragmentList.size();
  137. }
  138. }
  139. }
  140. package com.example.demo;
  141. import android.os.Bundle;
  142. import android.support.v4.app.Fragment;
  143. import android.view.LayoutInflater;
  144. import android.view.View;
  145. import android.view.ViewGroup;
  146. import android.widget.TextView;
  147. public class MyFragment extends Fragment {
  148. private int index = 0;
  149. private LayoutInflater mInflater;
  150. @Override
  151. public void onCreate(Bundle savedInstanceState) {
  152. super.onCreate(savedInstanceState);
  153. index = getArguments().getInt("index", 0);
  154. }
  155. @Override
  156. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  157. Bundle savedInstanceState) {
  158. mInflater = inflater;
  159. TextView v = (TextView) mInflater.inflate(R.layout.fragment, null);
  160. v.setText("第" + index);
  161. return v;
  162. }
  163. }

demo.zip (1.4 MB)

安卓开发之使用viewpager+fragment实现滚动tab页的更多相关文章

  1. 安卓开发_浅谈Fragment之ListFragment

    ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...

  2. 安卓开发_WebView如何在Fragment中使用

    之前学习了如何在activity中使用WebView控件来显示网页. 在我的实际开发中,有需要在Fragment中用到WebView控件的,那么就百度学习了一下 其实很简单,但是当然不是和在Activ ...

  3. 安卓开发_浅谈Fragment之事务添加Fragment对象

    我们都知道给一个activity动态添加fragment的时候 有下面几种添加方式 看一下布局文件 <LinearLayout xmlns:android="http://schema ...

  4. Android Viewpager+Fragment实现滑动标签页

    ViewPager 结合Fragment实现一个Activity里包含多个可滑动的标签页,每个标签页可以有独立的布局及响应. 主页布局 <?xml version="1.0" ...

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

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

  6. 安卓开发笔记——Fragment+ViewPager组件(高仿微信界面)

    什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开发复习笔记——ViewPager组件(仿微信引导界面)>,不清楚的朋友可以看看,这里就不再 ...

  7. 安卓开发_深入学习ViewPager控件

    一.概述 ViewPager是android扩展包v4包(android.support.v4.view.ViewPager)中的类,这个类可以让用户左右切换当前的view. ViewPager特点: ...

  8. 安卓开发笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)

    记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果,但作为学习,还是需要来了解下这个新引入类FragmentTabHost 之前2篇文章的链接: 安 ...

  9. Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

随机推荐

  1. jquery元素定位方法

    用chrome浏览器打开页面,按f12调出开发者调试模式,查看elements,部分代码如下图所示,注意红框部分 假设我们要查找某些元素的位置,用鼠标移到那部分元素,调试器会自动用蓝颜色标示选中部分的 ...

  2. OpenCV安装要点

    OpenCV安装要点1.设置系统和用户环境变量PATH指向opencv\build\x86\vc10\bin或者opencv\build\x64\vc10\bin2.新建用户环境变量OpenCV指向o ...

  3. python中隐式的内存共享

    在python中,基本上使用的是引用,那么就会造成一个隐式的内存共享,特别是在容器对象中,例如list,dictionary 对于不可变对象,是不会造成隐式的内存共享情况,如下所示: >> ...

  4. nagios-解决监控页面上的乱码

    1. 前景 在nagios的监控页面上发现返回来的信息为乱码,如下图所示: 查看相关日志,发现正常显示汉字,如下: 2. 解决方法(以下两个步骤缺一不可) 主要原因分析如下: 在nagios服务器上发 ...

  5. 设计模式 命令-Command

    命令-Command 当要向不同类的对象发出相同的请求时,可以将接收者和他的动作封装进一个命令对象.这样调用者只和命令产生依赖.而不会和众多的接收者发生依赖. Head First例子 要设计一款遥控 ...

  6. 星星字体 ps教程

    本教程主要使用Photoshop制作绚丽星空装饰的艺术字教程,这个教程很简单,只需要一些简单技巧,即可做出海报.书籍杂志的封面效果.其中的字体.笔刷和背景均可以更换 教程所需要的素材链接:http:/ ...

  7. jquery ajax跨域的完美解决方法(jsonp方式)

    ajax跨域请求的问题,JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式,接下来为大家详细介绍下客户端JQuery.ajax的调用代码     今天在项目中需要做远程数据加载 ...

  8. 输出(test)

    本题要求从输入的N个整数中查找给定的X.如果找到,输出X的位置(从0开始数):如果没有找到,输出“Not Found”. 输入格式: 输入在第1行中给出2个正整数N(<=20)和X,第2行给出N ...

  9. PySpark调用自定义jar包

    在开发PySpark程序时通常会需要用到Java的对象,而PySpark本身也是建立在Java API之上,通过Py4j来创建JavaSparkContext. 这里有几点是需要注意的 1. Py4j ...

  10. Azure Cloud中的Log4Net设置

    这里的Cloud包含Worker Role和Web Role,Role是运行在云主机中的,这里的主机和VM有所不同,Windows Azure Role Architecture.我们并没有和本地服务 ...