闲着。用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. 精品手游《里奥的财富》高清版逆向移植家用机与PC平台(转)

    冒险动作游戏<里奥的财富>于去年10月登陆移动平台,曾荣获App Store“年度优秀游戏”.开发商宣布将推出其HD版本,近期会陆续登陆PS4.PC.MAC.Xbox One平台. 由瑞典 ...

  2. md5加密算法c语言版

    from: http://blog.sina.com.cn/s/blog_693de6100101kcu6.html 注:以下是md5加密算法c语言版(16/32位) ---------------- ...

  3. 设计模式 命令-Command

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

  4. 【工作备忘】suricata

    因为工作遇到的困难,我向suricata的某个作者发送了邮件. On Wed, Sep 11, 2013 at 8:22 AM, likeyi <929812468@qq.com> wro ...

  5. windows程序移植linux

    1,路径名统一用正斜杠“/”.(windows下正反斜杠都识别,linux只认正斜杠.) 2,统一使用UTF-8格式编码. vim中无法保存汉字时,可输入下列命令: :set fileencoding ...

  6. MySQL 5.5 服务器变量详解一(转)

    add by zhj:在MySQL5.6中对一些参数有增删改,详见http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html ...

  7. 通过ModuleImplAdvertisement向自定义服务传递参数

    无意中发现通过ModuleImplAdvertisement可以向自定义服务传递参数,有空试一试. —————————————————————————————————————————————————— ...

  8. python用httplib模块发送get和post请求

    在python中,模拟http客户端发送get和post请求,主要用httplib模块的功能. 1.python发送GET请求 我在本地建立一个测试环境,test.php的内容就是输出一句话: 1 e ...

  9. python报错ordinal not in range(128)

    python编码问题:'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128) 这种问题有三种原因: ...

  10. CSS画出的各种形状图

    利用CSS可以画出各种需要的图形目录[1]矩形[2]圆形[3]椭圆[4]直角三角形[5]正三角形[6]平行四边形[7]梯形[8]六角星[9]六边形[10]五角星简单图形 矩形div{ width: 1 ...