安卓开发之使用viewpager+fragment实现滚动tab页
闲着。用viewpager+fragment实现了个滚动tab。。轻拍,以后会陆续发先小东西出来。。爱分享,才快乐。demo见附件。。
- package com.example.demo;
- import java.util.ArrayList;
- import java.util.List;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentActivity;
- import android.support.v4.app.FragmentManager;
- import android.support.v4.app.FragmentPagerAdapter;
- import android.support.v4.view.ViewPager;
- import android.support.v4.view.ViewPager.OnPageChangeListener;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.TextView;
- public class MainActivity extends FragmentActivity {
- private TextView chatView, address, findView;
- private ViewPager mViewPager;
- private TextView mBottomLine;
- private int screenWidth = 0;
- private int currentIndex = 0;
- private MyPagerAdapter myPagerAdapter;
- private List<Fragment> mFragmentList = new ArrayList<Fragment>();
- private List<String> mTitleList = new ArrayList<String>();
- MyFragment chatFragment;
- MyFragment findFragment;
- MyFragment addressFragment;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initComponents();
- }
- private void initComponents() {
- this.mBottomLine = (TextView) findViewById(R.id.bottom_line);
- this.screenWidth = getWindowManager().getDefaultDisplay().getWidth();
- this.chatView = (TextView) findViewById(R.id.chat_top_info);
- this.findView = (TextView) findViewById(R.id.find_top_info);
- this.address = (TextView) findViewById(R.id.address_top_info);
- TopTabClickListener clickListener = new TopTabClickListener();
- this.chatView.setOnClickListener(clickListener);
- this.findView.setOnClickListener(clickListener);
- this.address.setOnClickListener(clickListener);
- this.mViewPager = (ViewPager)findViewById(R.id.viewPager);
- chatFragment = new MyFragment();
- Bundle b = new Bundle();
- b.putInt("index", 0);
- chatFragment.setArguments(b);
- mFragmentList.add(chatFragment);
- findFragment = new MyFragment();
- b = new Bundle();
- b.putInt("index", 1);
- findFragment.setArguments(b);
- mFragmentList.add(findFragment);
- addressFragment = new MyFragment();
- b = new Bundle();
- b.putInt("index", 2);
- addressFragment.setArguments(b);
- mFragmentList.add(addressFragment);
- myPagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), mFragmentList, mTitleList);
- mViewPager.setAdapter(myPagerAdapter);
- mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
- @Override
- public void onPageSelected(int index) {}
- @Override
- public void onPageScrolled(int index, float arg1, int pixes) {
- if(pixes != 0){
- mBottomLine.layout((int) ((index + arg1) * screenWidth / 3), 0, (int) ((index + 1 + arg1) * screenWidth / 3), mBottomLine.getWidth());
- }
- if (pixes == 0) {
- currentIndex = index;
- changeIndex(currentIndex);
- }
- System.out.println("the state is : " + arg1 + " and index is " + index);
- }
- @Override
- public void onPageScrollStateChanged(int state) {}
- });
- }
- public void onLeftBtnClick(View view){
- this.finish();
- }
- private class TopTabClickListener implements OnClickListener{
- @Override
- public void onClick(View view) {
- if (view.getId() == chatView.getId()) {
- mViewPager.setCurrentItem(0);
- }else if(view.getId() == findView.getId()){
- mViewPager.setCurrentItem(1);
- }else{
- mViewPager.setCurrentItem(2);
- }
- changeIndex(mViewPager.getCurrentItem());
- }
- }
- private void changeIndex(int index){
- if(index == 0){
- chatView.setTextColor(getResources().getColor(R.color.green));
- findView.setTextColor(getResources().getColor(R.color.black));
- address.setTextColor(getResources().getColor(R.color.black));
- }else if(index == 1){
- findView.setTextColor(getResources().getColor(R.color.green));
- chatView.setTextColor(getResources().getColor(R.color.black));
- address.setTextColor(getResources().getColor(R.color.black));
- }else {
- address.setTextColor(getResources().getColor(R.color.green));
- findView.setTextColor(getResources().getColor(R.color.black));
- chatView.setTextColor(getResources().getColor(R.color.black));
- }
- mBottomLine.layout((int) (index * screenWidth / 3), 0, (int) ((index + 1) * screenWidth / 3), mBottomLine.getWidth());
- }
- private class MyPagerAdapter extends FragmentPagerAdapter {
- private List<Fragment> fragmentList;
- private List<String> titleList;
- public MyPagerAdapter(FragmentManager fm, List<Fragment> fragmentList,
- List<String> titleList) {
- super(fm);
- this.fragmentList = fragmentList;
- this.titleList = titleList;
- }
- /**
- * 得到每个页面
- */
- @Override
- public Fragment getItem(int arg0) {
- return (fragmentList == null || fragmentList.size() == 0) ? null
- : fragmentList.get(arg0);
- }
- /**
- * 每个页面的title
- */
- @Override
- public CharSequence getPageTitle(int position) {
- return (titleList.size() > position) ? titleList.get(position) : "";
- }
- @Override
- public int getCount() {
- return fragmentList == null ? 0 : fragmentList.size();
- }
- }
- }
- package com.example.demo;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.TextView;
- public class MyFragment extends Fragment {
- private int index = 0;
- private LayoutInflater mInflater;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- index = getArguments().getInt("index", 0);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- mInflater = inflater;
- TextView v = (TextView) mInflater.inflate(R.layout.fragment, null);
- v.setText("第" + index);
- return v;
- }
- }
demo.zip (1.4 MB)
安卓开发之使用viewpager+fragment实现滚动tab页的更多相关文章
- 安卓开发_浅谈Fragment之ListFragment
ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...
- 安卓开发_WebView如何在Fragment中使用
之前学习了如何在activity中使用WebView控件来显示网页. 在我的实际开发中,有需要在Fragment中用到WebView控件的,那么就百度学习了一下 其实很简单,但是当然不是和在Activ ...
- 安卓开发_浅谈Fragment之事务添加Fragment对象
我们都知道给一个activity动态添加fragment的时候 有下面几种添加方式 看一下布局文件 <LinearLayout xmlns:android="http://schema ...
- Android Viewpager+Fragment实现滑动标签页
ViewPager 结合Fragment实现一个Activity里包含多个可滑动的标签页,每个标签页可以有独立的布局及响应. 主页布局 <?xml version="1.0" ...
- ViewPager + Fragment实现滑动标签页
http://blog.csdn.net/lizhenmingdirk/article/details/13631813; tab与frg的区别: http://www.cnblogs.com/tia ...
- 安卓开发笔记——Fragment+ViewPager组件(高仿微信界面)
什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开发复习笔记——ViewPager组件(仿微信引导界面)>,不清楚的朋友可以看看,这里就不再 ...
- 安卓开发_深入学习ViewPager控件
一.概述 ViewPager是android扩展包v4包(android.support.v4.view.ViewPager)中的类,这个类可以让用户左右切换当前的view. ViewPager特点: ...
- 安卓开发笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)
记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果,但作为学习,还是需要来了解下这个新引入类FragmentTabHost 之前2篇文章的链接: 安 ...
- Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
随机推荐
- 项目管理及自动构建工具Maven
项目管理及自动构建工具Maven 一.Maven安装.目录结构.cmd命令1.下载安装apache-maven-3.2.3-bin.zip下载:http://maven.apache.org/down ...
- 批量还原数据库 SQL Server 2008
1.如果你够懒,不想一步一步点路径,一步一步选择 2.如果你连单个备份数据库的存储过程都不想多执行,一般每还原一个需要修改数据库名 下面的脚本适合你: /*********************** ...
- Hadoop 2 初探
Hadoop 2.6.0的安装略复杂,在一台既有Hadoop 1又有Hadoop 2的server上,要设置好环境变量,必要时候echo $HADOOP_HOME一下看运行的是哪个版本. Master ...
- 在JSP中使用CKEditor网页编辑器
为了在我的一个项目使用CKEditor网页编辑器,我开始了寻找应用之法. 我下载了ckeditor_4.3.3_standard和ckeditor-java-core-3.5.3. 之前的版本和现在版 ...
- [POJ] #1004# Financial Management : 浮点数运算
一. 题目 Financial Management Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 173910 Acc ...
- 关于Windows Azure 地缘组(Affinity Groups)
最近在和一些客户和朋友的沟通中,发现Windows Azure地缘组概念很少有了解.我的建议是使用地缘组来优化同一区域内的网络访问速度.如果我的说法有误,欢迎大家指正. 关于“地缘组”的概念(摘自MS ...
- HD2043猜密码
密码 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission ...
- 创建一个EMS 扩展包
EMS Package 向导: File > New > Other > Delphi projects > EMS > EMS Package Empty packag ...
- C#.NET 消息机制
一.消息概述 众人周知,window系统是一个消息驱动的系统, windows操作系统本身有自己的消息队列,消息循环,它捕捉键盘,鼠标的动作生成消息,并将这个消息传给应用程序的消息队列. 余下的工作有 ...
- zendstudio 出现failed to create the java machine转
是因为配置java虚拟机内存太小 打开zend for eclipse 10.5时报了个错: failed to create the java virtual machine google了一下,解 ...