这里利用ViewPager实现页面的滑动,下面直接上代码:

1、首先写一个Activity,然后将要滑动的Fragment镶嵌到写好的Activity中。

Activity的布局文件:activity_main.xml:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <FrameLayout
android:id="@+id/id_content"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp"/> <android.support.v4.view.ViewPager
android:id="@+id/id_viewpage"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="0.001" >
</android.support.v4.view.ViewPager> <include layout="@layout/bottom" /> </LinearLayout>

activity_main.xml中引入的布局(下面的切换的部分)

bottom.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="55dp"
android:background="@drawable/bottom"
android:orientation="horizontal" > <LinearLayout
android:id="@+id/id_tab_education"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" > <!-- android:clickable="false" 是为了防止ImageButton截取了触摸事件 ,这里事件要给它的上一级linearlayout --> <ImageButton
android:id="@+id/id_tab_education_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:clickable="false"
android:src="@drawable/tab_bar_01_check" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bottom_jurisdiction" />
</LinearLayout> <LinearLayout
android:id="@+id/id_tab_frd"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" > <ImageButton
android:id="@+id/id_tab_frd_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:clickable="false"
android:src="@drawable/tab_bar_04" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bottom_discover" />
</LinearLayout> <LinearLayout
android:id="@+id/id_tab_setting"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" > <ImageButton
android:id="@+id/id_tab_setting_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:clickable="false"
android:src="@drawable/tab_bar_05" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bottom_my" />
</LinearLayout> </LinearLayout>

MainActivity.class(用来镶嵌Fragment)

 package com.example.activity;

 import com.example.fragment.SeekFragment;
import com.example.fragment.ProcedureFragment;
import com.example.fragment.MyFragment;
import com.example.myproject.R; import android.app.Activity;
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.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.Toast; public class MainActivity extends FragmentActivity implements OnClickListener{ private long lastTime;//退出键的最后时间
private ViewPager mViewPager;// 用来放置界面切换
// 三个Tab,每个Tab包含一个按钮
private LinearLayout mTabEducation;
private LinearLayout mTabFrd;
private LinearLayout mTabSetting;
// 三个按钮
private ImageButton mEducationImg;
private ImageButton mFrdImg;
private ImageButton mSettingImg;
// 初始化3个Fragment
private Fragment jurisdiction;
private Fragment discover;
private Fragment setting; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main); initView();
initEvent();
initViewPage(0);
} /*
* 判断哪个要显示,及设置按钮图片
*/
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.id_tab_education:
initViewPage(0);
mViewPager.setCurrentItem(0);
resetImg();
mEducationImg.setImageResource(R.drawable.tab_bar_01_check);
break;
case R.id.id_tab_frd:
initViewPage(1);
mViewPager.setCurrentItem(1);
resetImg();
mFrdImg.setImageResource(R.drawable.tab_bar_04_check);
break;
case R.id.id_tab_setting:
initViewPage(2);
mViewPager.setCurrentItem(2);
resetImg();
mSettingImg.setImageResource(R.drawable.tab_bar_05_check);
break;
default:
break;
}
} /*
* 初始化配置
*/
private void initView() {
mViewPager = (ViewPager) findViewById(R.id.id_viewpage);
// 初始化三个LinearLayout
mTabEducation = (LinearLayout) findViewById(R.id.id_tab_education);
mTabFrd = (LinearLayout) findViewById(R.id.id_tab_frd);
mTabSetting = (LinearLayout) findViewById(R.id.id_tab_setting);
// 初始化三个按钮
mEducationImg = (ImageButton) findViewById(R.id.id_tab_education_img);
mFrdImg = (ImageButton) findViewById(R.id.id_tab_frd_img);
mSettingImg = (ImageButton) findViewById(R.id.id_tab_setting_img);
} /*
* 初始化initViewPage
*/
private void initViewPage(int i) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();// 创建一个事务
hideFragment(transaction);// 我们先把所有的Fragment隐藏了,然后下面再开始处理具体要显示的Fragment
switch (i) {
case 0:
if (jurisdiction == null) {
jurisdiction = new ProcedureFragment();
transaction.add(R.id.id_content, jurisdiction);// 将微信聊天界面的Fragment添加到Activity中
} else {
transaction.show(jurisdiction);
}
break;
case 1:
if (discover == null) {
discover = new SeekFragment();
transaction.add(R.id.id_content, discover);
} else {
transaction.show(discover);
}
break;
case 2:
if (setting == null) {
setting = new MyFragment();
transaction.add(R.id.id_content, setting);
} else {
transaction.show(setting);
}
break; default:
break;
} transaction.commit();// 提交事务
} private void initEvent() {
mTabEducation.setOnClickListener(this);
mTabFrd.setOnClickListener(this);
mTabSetting.setOnClickListener(this);
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
int currentItem = mViewPager.getCurrentItem();
switch (currentItem) {
case 0:
resetImg();
mEducationImg.setImageResource(R.drawable.tab_bar_01_check);
break;
case 1:
resetImg();
mFrdImg.setImageResource(R.drawable.tab_bar_04_check);
break;
case 2:
resetImg();
mSettingImg.setImageResource(R.drawable.tab_bar_05_check);
default:
break;
}
} @Override
public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override
public void onPageScrollStateChanged(int arg0) { }
});
} /*
* 隐藏所有的Fragment
*/
private void hideFragment(FragmentTransaction transaction) {
if (jurisdiction != null) {
transaction.hide(jurisdiction);
}
if (discover != null) {
transaction.hide(discover);
}
if (setting != null) {
transaction.hide(setting);
}
} /*
* 把所有图片变暗
*/
private void resetImg() {
mEducationImg.setImageResource(R.drawable.tab_bar_01);
mFrdImg.setImageResource(R.drawable.tab_bar_04);
mSettingImg.setImageResource(R.drawable.tab_bar_05);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - lastTime <= 2000) {
finish();
} else {
Toast.makeText(this, "再按一次退出程序", 1000).show();
lastTime = System.currentTimeMillis();
}
return false;
}
return super.onKeyDown(keyCode, event);
}
}

通过以上代码即可实现微信或QQ的那种页面的切换了,具体里面的内容则根据自身情况在相应的fragment中来实现。

下面给一个一个空的Fragment,以此为蓝图,剩余的部分可以在此基础上更改添加。

SeekFragment.java

 package com.example.fragment;

 import com.example.myproject.R;

 import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* 查找fragment
* @author admin
*
*/
public class SeekFragment extends Fragment {
private View rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (null == rootView) {
rootView = inflater.inflate(R.layout.fragment_seek, container,
false);
initView(rootView);
}
return rootView;
}
/**
* 用于初始化,具体操作视自己情况而定
* @param rootView
*/
private void initView(View rootView) { }
}

Android开发之利用ViewPager实现页面的切换(仿微信、QQ)的更多相关文章

  1. Android开发之利用ViewPager实现在Activity或Fragment中引入别的布局文件实现滑动并进行页面跳转

    有些时候经常可以看到其他APP中有一排的图标,可以在一个界面中滑来滑去,并且图标可以进行点击事件进行页面的跳转.这里对这种方法的实现做出总结. 首先看一下图片: 下面这两种图片是在一个Fragment ...

  2. Android中Fragment和ViewPager那点事儿(仿微信APP)

    在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...

  3. Android开发之利用SQLite进行数据存储

    Android开发之利用SQLite进行数据存储 Android开发之利用SQLite进行数据存储 SQLite数据库简单介绍 Android中怎样使用SQLite 1 创建SQLiteOpenHel ...

  4. 转:Android ViewPager多页面滑动切换以及动画效果

    一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式, 白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了 ...

  5. Android开发UI之ViewPager及PagerAdapter

    ViewPager,官网链接--http://developer.android.com/reference/android/support/v4/view/ViewPager.html ViewPa ...

  6. Android ViewPager多页面滑动切换以及动画效果

    一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式,白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了, ...

  7. Android——ViewPager多页面滑动切换以及动画效果

    一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式,白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了, ...

  8. android开发学习之ViewPager滑动事件讲解

    android ViewPager滑动事件讲解 今天在做项目的时候,由于要处理viewPager页面滑动的事件,所以对其进行了一个小小的研究: 首先ViewPager在处理滑动事件的时候要用到OnPa ...

  9. Android开发实战之ViewPager实现向导界面

    当我们更新应用,或者第一次进入应用时都会有一个向导界面,介绍这个app的内容和使用方式. 如果你细心你会发现其实这就是个viewpager,本篇博文将介绍应用的向导界面是如何制作的.希 望本篇博文对你 ...

随机推荐

  1. 第七次Scrum冲刺

    第七次Scrum冲刺 1.今日完成的任务 队员 今日完成任务 刘佳 前端与后端对接 李佳 后端与数据库对接 周世元 数据库与后端对接 杨小妮 博客编写 许燕婷 管理团队当日及次日任务 陈水莲 综合测试 ...

  2. 吴裕雄 python oracle操作数据库(4)

    import cx_Oracle conn = cx_Oracle.connect("scott/admin@localhost:1521/orcl")cursor = conn. ...

  3. opencv输出图片像素值

    需求:在控制台输出灰度图像的像素值 代码: #include <stdio.h> #include <iostream> #include <opencv2/core/c ...

  4. 指向字符串的指针和char类型的数组

    指针数组的效率比二维字符数组的效率高 指针数组不能修改字符串字面量,而二维字符数组中的内容可以更改

  5. Stm32 资料

    http://i.youku.com/i/UODMyMTgwNTY=?spm=a2hzp.8253869.0.0 http://blog.sina.cn/dpool/blog/s/blog_14f65 ...

  6. Linux 安装nginx 及配置

    安装openssl库   # yum install -y openssl openssl-devel 安装gcc     # yum install gcc-c++ 安装 PCRE    # yum ...

  7. java 开学第四周

    package english; import java.io.File; import java.util.Scanner; import java.io.FileNotFoundException ...

  8. apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80

    说明80端口被用 终端:  ps -ef|grep httpd察看占用的进程或者用netstat -lnp|grep 80 找到后kill掉,如果都不行那么再试试以下方法(试过可以) 终端输入: fi ...

  9. PyCon大会Python主题演讲摘要

    PyCon 是全国际最大的以 Python 编程言语 为主题的技能大会.大会由 Python 社区组织,每年举行一次.在大会上,来自国际各地的 Python 用户与中心开发者齐聚一堂,共同同享 Pyt ...

  10. 最小k度限制生成树

    [题目描述] 给你一个图,n个点,m条边,求一颗生成树满足如下条件: (1)结点1的度不超过k. (2)在(1)条件下所求生成树最小. [算法引入] 最小k度限制生成树,就是指有特殊的某一点的度不能超 ...