使用Fragment+ViewPager,仿微信实现多页Tab切换

我们今天实现类似微信的首页的滑动Tab效果:

     
  

郭霖有一篇博客http://blog.csdn.net/guolin_blog/article/details/13171191,讲过如何实现,但是他的demo不能通过滑动切换,只能通过点击按钮切换。

通过viewpager,我们可以完全实现微信的效果。

先看看我的实现效果:

    

主页面代码

package com.example.fragmentdemo;

import java.util.ArrayList;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * @author luyecong
 *
 */
public class MainActivity extends FragmentActivity implements OnClickListener, OnPageChangeListener{
	private Fragment homeFragment = new HomeFragment();
	private Fragment settingFragment = new SettingFragment();
	private Fragment moreFragment = new MoreFragment();

	private View homeLayout;
	private View settingLayout;
	private View moreLayout;

	private ImageView homeImage;
	private ImageView settingImage;
	private ImageView moreImage;

	private TextView homeText;
	private TextView settingText;
	private TextView moreText;

	private ViewPager viewPager;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);

		initViews();

		final ArrayList<Fragment> fragmentList = new ArrayList<Fragment>();
		fragmentList.add(homeFragment);
		fragmentList.add(settingFragment);
		fragmentList.add(moreFragment);

		viewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager(), fragmentList));

		viewPager.setOnPageChangeListener(this);
		setTabSelection(0);
	}

	/**
	 * 在这里获取到每个需要用到的控件的实例,并给它们设置好必要的点击事件。
	 */
	private void initViews() {
		viewPager = (ViewPager) findViewById(R.id.content);
		homeLayout = findViewById(R.id.home_layout);
		settingLayout = findViewById(R.id.setting_layout);
		moreLayout = findViewById(R.id.more_layout);

		homeImage = (ImageView) findViewById(R.id.home_image);
		settingImage = (ImageView) findViewById(R.id.setting_image);
		moreImage = (ImageView) findViewById(R.id.more_image);

		homeText = (TextView) findViewById(R.id.home_text);
		settingText = (TextView) findViewById(R.id.setting_text);
		moreText = (TextView) findViewById(R.id.more_text);

		homeLayout.setOnClickListener(this);
		settingLayout.setOnClickListener(this);
		moreLayout.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.home_layout:
			setTabSelection(0);
			viewPager.setCurrentItem(0);
			break;
		case R.id.setting_layout:
			setTabSelection(1);
			viewPager.setCurrentItem(1);
			break;
		case R.id.more_layout:
			setTabSelection(2);
			viewPager.setCurrentItem(2);
			break;
		default:
			break;
		}
	}

	/**
	 * 清除掉所有的选中状态。
	 */
	private void clearSelection() {
		homeImage.setImageResource(R.drawable.tabbar_home);
		homeText.setTextColor(Color.parseColor("#82858b"));
		settingImage.setImageResource(R.drawable.tabbar_setting);
		settingText.setTextColor(Color.parseColor("#82858b"));
		moreImage.setImageResource(R.drawable.tabbar_more);
		moreText.setTextColor(Color.parseColor("#82858b"));
	}

	@Override
	public void onPageScrollStateChanged(int arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onPageSelected(int arg0) {
		setTabSelection(arg0);
	}

	private void setTabSelection(int index) {
		// 每次选中之前先清楚掉上次的选中状态
		clearSelection();

		switch (index) {
		case 0:
			// 当点击了主页tab时,改变控件的图片和文字颜色
			homeImage.setImageResource(R.drawable.tabbar_home_s);
			homeText.setTextColor(Color.BLUE);
			break;
		case 1:
			// 当点击了语言设置tab时,改变控件的图片和文字颜色
			settingImage.setImageResource(R.drawable.tabbar_setting_s);
			settingText.setTextColor(Color.BLUE);
			break;
		case 2:
			// 当点击了更多tab时,改变控件的图片和文字颜色
			moreImage.setImageResource(R.drawable.tabbar_more_s);
			moreText.setTextColor(Color.BLUE);
			break;
		case 3:
		default:
			break;
		}
	}
}
package com.example.fragmentdemo;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;

public class TabPagerAdapter extends FragmentStatePagerAdapter {
	private List<Fragment> list;

	public TabPagerAdapter(FragmentManager fm, List<Fragment> list) {
		super(fm);
		this.list = list;
	}

	@Override
	public Fragment getItem(int arg0) {
		return list.get(arg0);
	}

	@Override
	public int getCount() {
		return list.size();
	}

}

主页面布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >
    </android.support.v4.view.ViewPager>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="@drawable/tabbar_bg" >

        <RelativeLayout
            android:id="@+id/home_layout"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:orientation="vertical" >

                <ImageView
                    android:id="@+id/home_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/tabbar_home" />

                <TextView
                    android:id="@+id/home_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:text="主页"
                    android:textColor="#82858b" />
            </LinearLayout>
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/setting_layout"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:orientation="vertical" >

                <ImageView
                    android:id="@+id/setting_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/tabbar_setting" />

                <TextView
                    android:id="@+id/setting_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:text="语言设置"
                    android:textColor="#82858b" />
            </LinearLayout>
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/more_layout"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:orientation="vertical" >

                <ImageView
                    android:id="@+id/more_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/tabbar_more" />

                <TextView
                    android:id="@+id/more_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:text="更多"
                    android:textColor="#82858b" />
            </LinearLayout>
        </RelativeLayout>

    </LinearLayout>

</LinearLayout>

fragment的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

 	<com.example.fragmentdemo.Title
		android:id="@+id/title"
		android:layout_height="50dp"
		android:layout_width="fill_parent"
		android:layout_alignParentTop="true"
		android:clickable="true"
		android:focusable="true"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:padding="10dp"
            android:text="这是主页"
            android:textSize="20sp" />
    </LinearLayout>

</RelativeLayout>
时间: 2024-08-24 13:38:28

使用Fragment+ViewPager,仿微信实现多页Tab切换的相关文章

Android利用ViewPager仿微信主界面-android学习之旅(78)

首先是介绍ViewPager这个控件 ,这个控件需要pagerAdapter作为容器来提供数据,同时pagerAdapter的数据源是View数组 效果图如下 部分代码如下,实现如下的方法 mPagerAdapter = new PagerAdapter(){ @Override public int getCount() { return mViews.size(); } @Override public boolean isViewFromObject(View view, Object o

bootstrap 标签页tab切换js(含报错原因)

booststrap 标签页的tab切换,相信大家已经都很熟悉了,在boot官网示例以及其他网站已经很多罗列相关代码的了,这里就不赘述了.这里主要贴下让boot标签页默认显示哪个标签页的js. 主要留作自己工作备忘. 1 $('a[data-toggle="tab"]') 2 $('#myTab a[href="#profile"]').tab('show') 3 $('#myTab a:first').tab('show') 4 $('#myTab a:last'

微信小程序 导航tab切换,跟随滚动置顶

<view class="small_nav {{tabFixed?'small_navFix':''}}" id="tab-con"> <scroll-view scroll-x="true" scroll-left="{{scrollLeft}}"> <view class="small_nav_scroll"> <view class="{{id==

lottie动画实战(仿汽车之家底部Tab切换动画)

GitHub地址:https://github.com/kongpf8848/Animation 效果如下: 主要是自定义View继承LottieAnimationView并实现Checkable接口,代码如下: import android.content.Context; import android.util.AttributeSet; import android.widget.Checkable; import com.airbnb.lottie.LottieAnimationView

安卓开发复习笔记——Fragment+ViewPager组件(高仿微信界面)

什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开发复习笔记——ViewPager组件(仿微信引导界面)>,不清楚的朋友可以看看,这里就不再重复. 什么是Fragment? Fragment是Android3.0后新增的概念,Fragment名为碎片,不过却和Activity十分相似,具有自己的生命周期,它是用来描述一些行为或一部分用户界面在一个Activity中,我们可以合并多个Fragment在一个单独的activity中建立多个UI面板,或

转-Fragment+ViewPager组件(高仿微信界面)

http://www.cnblogs.com/lichenwei/p/3982302.html 什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开发复习笔记——ViewPager组件(仿微信引导界面)>,不清楚的朋友可以看看,这里就不再重复. 什么是Fragment? Fragment是Android3.0后新增的概念,Fragment名为碎片,不过却和Activity十分相似,具有自己的生命周期,它是用来描述一些行为或一部分用户界面在一个Act

Android控件-Fragment+ViewPager(高仿微信界面)

什么是Fragment? Fragment是Android3.0后新增的概念,Fragment名为碎片,不过却和Activity十分相似,具有自己的生命周期,它是用来描述一些行为或一部分用户界面在一个Activity中,我们可以合并多个Fragment在一个单独的activity中建立多个UI面板,或者重用Fragment在多个activity中. 关于Fragment的生命周期,由于Fragment需要依赖Activity,也就是说当一个Activity的生命周期结束之后,那么Fragment

Android仿大众点评引导页(ViewPage)+主页面(Fragment)的实现

大家好,今天主要是实现仿大众点评引导页和主页面以及城市定位的实现,主要使用ViewPager+Fragment+SharedPreferences,实现了第一次打开程序出现引导页,再次打开跳过引导页,这也是一般应用常用的应用基本架构方式.下面首先来看最终实现效果如下图: 1.布局文件说明 1)欢迎页布局文件welcome.xml 2) 引导页布局文件welcome_guide.xml 3)首页布局文件main_home.xml 4)团购布局文件main_tuan.xml 5) 发现布局文件mai

【转】android 欢迎界面翻页成效,仿微信第一次登陆介绍翻页界面

android 欢迎界面翻页效果,仿微信第一次登陆介绍翻页界面 本实例做的相对比较简单主要是对翻页控件的使用,有时候想要做一些功能是主要是先了解下是否有现成的控件可以使用,做起来比较简单不用费太大的劲去找别的资料,或者别的办法设计.有空多读读android API了解熟悉了做什么都比较容易.(注意:ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中加入“android-support-v4.jar” 如果sdk是4.0及以上的