安卓开发之使用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 ...
随机推荐
- 精品手游《里奥的财富》高清版逆向移植家用机与PC平台(转)
冒险动作游戏<里奥的财富>于去年10月登陆移动平台,曾荣获App Store“年度优秀游戏”.开发商宣布将推出其HD版本,近期会陆续登陆PS4.PC.MAC.Xbox One平台. 由瑞典 ...
- md5加密算法c语言版
from: http://blog.sina.com.cn/s/blog_693de6100101kcu6.html 注:以下是md5加密算法c语言版(16/32位) ---------------- ...
- 设计模式 命令-Command
命令-Command 当要向不同类的对象发出相同的请求时,可以将接收者和他的动作封装进一个命令对象.这样调用者只和命令产生依赖.而不会和众多的接收者发生依赖. Head First例子 要设计一款遥控 ...
- 【工作备忘】suricata
因为工作遇到的困难,我向suricata的某个作者发送了邮件. On Wed, Sep 11, 2013 at 8:22 AM, likeyi <929812468@qq.com> wro ...
- windows程序移植linux
1,路径名统一用正斜杠“/”.(windows下正反斜杠都识别,linux只认正斜杠.) 2,统一使用UTF-8格式编码. vim中无法保存汉字时,可输入下列命令: :set fileencoding ...
- MySQL 5.5 服务器变量详解一(转)
add by zhj:在MySQL5.6中对一些参数有增删改,详见http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html ...
- 通过ModuleImplAdvertisement向自定义服务传递参数
无意中发现通过ModuleImplAdvertisement可以向自定义服务传递参数,有空试一试. —————————————————————————————————————————————————— ...
- python用httplib模块发送get和post请求
在python中,模拟http客户端发送get和post请求,主要用httplib模块的功能. 1.python发送GET请求 我在本地建立一个测试环境,test.php的内容就是输出一句话: 1 e ...
- python报错ordinal not in range(128)
python编码问题:'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128) 这种问题有三种原因: ...
- CSS画出的各种形状图
利用CSS可以画出各种需要的图形目录[1]矩形[2]圆形[3]椭圆[4]直角三角形[5]正三角形[6]平行四边形[7]梯形[8]六角星[9]六边形[10]五角星简单图形 矩形div{ width: 1 ...