安卓开发之使用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 ...
随机推荐
- Cocos2d-android (01) 创建一个简单的cocos2d应用程序
下载Cocos2d-android的源代码:cocos2d-android-1 git@github.com:ZhouWeikuan/cocos2d.git 将项目导入到eclipse中.运行实例: ...
- Leetcode 225 Implement Stack using Queues
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- vs2008编译boost
vs2008编译boost [一.Boost库的介绍] Boost库是一个经过千锤百炼.可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一.Boost库由C++标准委员会库 ...
- Unable to find vcvarsall.bat解决方法
今天在安装scikit-learn时出现了 error: Unable to find vcvarsall.bat 在安装一些Python模块时,大部分是cpython写的模块时会发生如下错误 err ...
- poj2528(线段树+离散化)Mayor's posters
2016-08-15 题意:一面墙,往上面贴海报,后面贴的可以覆盖前面贴的.问最后能看见几种海报. 思路:可以理解成往墙上涂颜色,最后能看见几种颜色(下面就是以涂色来讲的).这面墙长度为1~1000 ...
- 使用DNSPod来处理网站的均衡负载(转)
add by zhj:配置倒是蛮简单的,其实就是把域名与多个IP进行关联,在数据库中实现这个应该也是蛮简单的. 原文:http://kb.cnblogs.com/page/75571/ 首先介绍下DN ...
- MYSQL数据库重点:自定义函数、存储过程、触发器、事件、视图
一.自定义函数 mysql自定义函数就是实现程序员需要sql逻辑处理,参数是IN参数,含有RETURNS字句用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句. 语法: 创建: ...
- socket对于大数据的发送和接收
大数据是指大于32K或者64K的数据. 大数据的发送和接收通过TSTREAM对象来进行是非常方便的. 我们把大数据分割成一个个4K大小的小包,然后再依次传输. 一.大数据的发送的类语言描述: 1)创建 ...
- 检测iOS的APP性能的一些方法
首先如果遇到应用卡顿或者因为内存占用过多时一般使用Instruments里的来进行检测.但对于复杂情况可能就需要用到子线程监控主线程的方式来了,下面我对这些方法做些介绍: Time Profiler ...
- VISIO 2007 修改形状默认字体 自定义模具
visio 2007的形状的默认字体为8号,比较小,怎样改成默认10号? 首先将一个流程图中所要用的形状都拖到绘图区,然后全选,设置字体为10号,全选,再拖动到形状区,如下图: 点击‘是’,确认修改模 ...