闲着。用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; } }
相关推荐
在Android开发中,`ViewPager`是一个非常常用的组件,它允许用户通过左右滑动来浏览多个页面,通常用于实现Tab切换或者展示多个相似内容的页面。`Fragment`则是Android中的一个模块化组件,它可以独立于Activity存在...
在Android应用开发中,`ViewPager`和`Fragment`是两个重要的组件,它们常被结合使用以实现用户界面的滑动切换效果。`ViewPager`提供了一个可以左右滑动查看多个页面的容器,而`Fragment`则作为Activity的部分内容,...
`ViewPager`是Android Support Library中的一个组件,它允许用户通过水平滑动来切换不同的页面,通常用于实现类似轮播图或者tab页的效果。`Fragment`则是Android应用中的一个可重用的UI组件,它可以独立于Activity...
在Android应用开发中,`ActionBarTabs`、`ViewPager`和`Fragment`是构建用户界面时常用的组件,尤其在实现Tab滑动翻页效果时。这个技术组合能够提供一个高效的、可扩展的用户交互方式,使得用户可以轻松地在多个内容...
总的来说,实现"ViewPager+Fragment+Tab底部导航效果"需要对Android的UI组件、数据绑定和生命周期管理有深入理解,同时也需要掌握自定义样式和动画技巧。这样的设计可以为用户提供直观且高效的交互体验,是现代...
在本教程中,我们将深入探讨如何使用Android的ViewPager和Fragment来实现一个选项卡式的界面。 首先,理解ViewPager的工作原理是关键。ViewPager是一个适配器视图,它可以显示多个页面并允许用户通过手势进行平滑的...
在Android开发中,`ViewPager`是一个非常常用的组件,它允许用户通过左右滑动来浏览多个页面,常用于实现Tab切换或者水平滚动的效果。`Fragment`则作为`Activity`的一部分,可以方便地在不同屏幕配置下管理界面内容...
本篇文章将详细介绍如何在Android项目中结合使用`ViewPager`和`Fragment`来实现页卡式切换,并且在每个页卡下方添加滚动条的效果。 `ViewPager` 是Android Support Library中的一个组件,它允许用户通过左右滑动来...
在"取消滑动搭建tab页"的场景下,我们通常会用到TabLayout与ViewPager的结合,实现底部导航栏的效果。TabLayout可以显示标签,用户点击后切换ViewPager中的页面,而不再需要物理滑动。这种方式既实现了主流的UI设计...
在Android开发中,`RadioButton`、`ViewPager`和`Fragment`是常见的组件,它们结合使用可以构建出功能丰富的用户界面,尤其是用于实现标签页(Tab)功能。下面将详细讲解这三个组件以及它们如何协同工作。 `...
**ViewPager**是Android SDK中的一个视图切换工具,它允许用户在多个页面之间滑动浏览,通常用于实现Tab布局或者水平滚动效果。在Android应用中,ViewPager常与PagerAdapter一起使用,PagerAdapter负责为ViewPager...
总结,通过结合使用ViewPager和Fragment,开发者可以构建出功能丰富的、动态的页面滑动效果,同时实现如欢迎页这样的特殊需求。在实际开发中,需要注意性能优化,如合理使用FragmentStatePagerAdapter以处理Fragment...
本教程将详细介绍如何利用`ViewPager`、`Fragment`以及模仿网易云音乐的tab选项栏来实现这样的功能。`ViewPager`是Android支持库中的一个组件,它允许用户左右滑动查看多个页面,而`Fragment`则用于在活动中添加或...
在Android应用开发中,`TabLayout`、`ViewPager` 和 `Fragment` 是常见的组件,用于构建具有多个标签页的应用界面。这些组件结合使用,能够创建一个动态、可滑动的标签导航系统,使得用户可以方便地在不同的内容区域...
ViewPager是Android系统提供的一个视图容器,它可以承载多个页面(通常为Fragment)并实现平滑的滑动切换。用户可以左右滑动页面来查看不同内容,非常适合用来创建滑动导航菜单或展示多个相互关联的视图。 接下来,...
在Android开发中,`TabLayout`、`ViewPager`和`Fragment`是常用组件,用于构建具有多标签页的用户界面。这些组件结合使用,可以创建一个动态、交互性强且易于扩展的应用头部,允许用户通过滑动来切换不同的内容区域...
本示例将详细介绍如何使用ViewPager和Fragment来替代传统的TabHost,以创建具有平滑滚动效果和动态内容加载的多页面视图。 首先,了解`ViewPager`。ViewPager是Android支持库中的一个组件,主要用于展示可以左右...
在Android开发中,`ViewPager`、`Fragment`、`ListView`和`SQLite`是四个非常重要的组件,它们各自承担着不同的职责,同时在实际应用中经常结合使用,以实现复杂而丰富的用户界面和数据管理。下面我们将深入探讨这些...
`ViewPager`常用于实现应用的Tab布局或者创建具有平滑过渡效果的滚动内容。通过`PagerAdapter`子类,如`FragmentPagerAdapter`或`FragmentStatePagerAdapter`,你可以为`ViewPager`提供数据源。 3. `Fragment` `...