`
Jclick
  • 浏览: 189143 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 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;
}
}

 

  • 大小: 73.6 KB
分享到:
评论

相关推荐

    ViewPager+Fragment实现自动循环滚动

    在Android开发中,`ViewPager`是一个非常常用的组件,它允许用户通过左右滑动来浏览多个页面,通常用于实现Tab切换或者展示多个相似内容的页面。`Fragment`则是Android中的一个模块化组件,它可以独立于Activity存在...

    Android ViewPager和Fragment 实现滑动切换页面

    在Android应用开发中,`ViewPager`和`Fragment`是两个重要的组件,它们常被结合使用以实现用户界面的滑动切换效果。`ViewPager`提供了一个可以左右滑动查看多个页面的容器,而`Fragment`则作为Activity的部分内容,...

    ViewPager+Fragment左右滑动+上下滑动不冲突

    `ViewPager`是Android Support Library中的一个组件,它允许用户通过水平滑动来切换不同的页面,通常用于实现类似轮播图或者tab页的效果。`Fragment`则是Android应用中的一个可重用的UI组件,它可以独立于Activity...

    android ActionBarTabs+ViewPager+Fragment 实现tab 滑动翻页效果

    在Android应用开发中,`ActionBarTabs`、`ViewPager`和`Fragment`是构建用户界面时常用的组件,尤其在实现Tab滑动翻页效果时。这个技术组合能够提供一个高效的、可扩展的用户交互方式,使得用户可以轻松地在多个内容...

    Viewpager+Fragment+Tab底部导航效果不错

    总的来说,实现"ViewPager+Fragment+Tab底部导航效果"需要对Android的UI组件、数据绑定和生命周期管理有深入理解,同时也需要掌握自定义样式和动画技巧。这样的设计可以为用户提供直观且高效的交互体验,是现代...

    Android ViewPager Fragment实现选项卡

    在本教程中,我们将深入探讨如何使用Android的ViewPager和Fragment来实现一个选项卡式的界面。 首先,理解ViewPager的工作原理是关键。ViewPager是一个适配器视图,它可以显示多个页面并允许用户通过手势进行平滑的...

    Android ViewPager+Fragment,ViewPager标示跟着ViewPager滑动而同时滑动

    在Android开发中,`ViewPager`是一个非常常用的组件,它允许用户通过左右滑动来浏览多个页面,常用于实现Tab切换或者水平滚动的效果。`Fragment`则作为`Activity`的一部分,可以方便地在不同屏幕配置下管理界面内容...

    Android中ViewPager+Fragment的使用(页卡式切换下方带滚动条)

    本篇文章将详细介绍如何在Android项目中结合使用`ViewPager`和`Fragment`来实现页卡式切换,并且在每个页卡下方添加滚动条的效果。 `ViewPager` 是Android Support Library中的一个组件,它允许用户通过左右滑动来...

    懒加载viewpager+fragment

    在"取消滑动搭建tab页"的场景下,我们通常会用到TabLayout与ViewPager的结合,实现底部导航栏的效果。TabLayout可以显示标签,用户点击后切换ViewPager中的页面,而不再需要物理滑动。这种方式既实现了主流的UI设计...

    RadioButton+ViewPager+Fragment

    在Android开发中,`RadioButton`、`ViewPager`和`Fragment`是常见的组件,它们结合使用可以构建出功能丰富的用户界面,尤其是用于实现标签页(Tab)功能。下面将详细讲解这三个组件以及它们如何协同工作。 `...

    Demo(viewPager+Fragment+DrawerLayout)完美结合,可以无限复用

    **ViewPager**是Android SDK中的一个视图切换工具,它允许用户在多个页面之间滑动浏览,通常用于实现Tab布局或者水平滚动效果。在Android应用中,ViewPager常与PagerAdapter一起使用,PagerAdapter负责为ViewPager...

    ViewPager和Fragment结合实现页面滑动,以及欢迎页

    总结,通过结合使用ViewPager和Fragment,开发者可以构建出功能丰富的、动态的页面滑动效果,同时实现如欢迎页这样的特殊需求。在实际开发中,需要注意性能优化,如合理使用FragmentStatePagerAdapter以处理Fragment...

    使用ViewPager+Fragment+仿网易云音乐的tab选项栏来实现多屏滑动

    本教程将详细介绍如何利用`ViewPager`、`Fragment`以及模仿网易云音乐的tab选项栏来实现这样的功能。`ViewPager`是Android支持库中的一个组件,它允许用户左右滑动查看多个页面,而`Fragment`则用于在活动中添加或...

    Tablayout+viewpager+fragment

    在Android应用开发中,`TabLayout`、`ViewPager` 和 `Fragment` 是常见的组件,用于构建具有多个标签页的应用界面。这些组件结合使用,能够创建一个动态、可滑动的标签导航系统,使得用户可以方便地在不同的内容区域...

    kotlin--利用TabLayout、ViewPager、Fragment实现滑动切换页面

    ViewPager是Android系统提供的一个视图容器,它可以承载多个页面(通常为Fragment)并实现平滑的滑动切换。用户可以左右滑动页面来查看不同内容,非常适合用来创建滑动导航菜单或展示多个相互关联的视图。 接下来,...

    TabLayout+ViewPager+Fragment

    在Android开发中,`TabLayout`、`ViewPager`和`Fragment`是常用组件,用于构建具有多标签页的用户界面。这些组件结合使用,可以创建一个动态、交互性强且易于扩展的应用头部,允许用户通过滑动来切换不同的内容区域...

    ViewPager+Fragment替代TabHost效果的简单示例

    本示例将详细介绍如何使用ViewPager和Fragment来替代传统的TabHost,以创建具有平滑滚动效果和动态内容加载的多页面视图。 首先,了解`ViewPager`。ViewPager是Android支持库中的一个组件,主要用于展示可以左右...

    ViewPager+Fragment+ListView+sqlite案例

    在Android开发中,`ViewPager`、`Fragment`、`ListView`和`SQLite`是四个非常重要的组件,它们各自承担着不同的职责,同时在实际应用中经常结合使用,以实现复杂而丰富的用户界面和数据管理。下面我们将深入探讨这些...

    ActionBar+ViewPager+Fragment+Observable

    `ViewPager`常用于实现应用的Tab布局或者创建具有平滑过渡效果的滚动内容。通过`PagerAdapter`子类,如`FragmentPagerAdapter`或`FragmentStatePagerAdapter`,你可以为`ViewPager`提供数据源。 3. `Fragment` `...

Global site tag (gtag.js) - Google Analytics