这里利用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. 多线程 死锁 wait(int i) notifyAll()

    public class ThreadDemo5 { public static void main(String[] args){ Pool pool = new Pool(); Productor ...

  2. html中,纯数字或纯英文的一串字符超出父容器不会折行显示,如何解决?

    这种情况在软件使用过程中一般不会出现,只有测试人员在测试的时候手比较贱会给你弄一个这种数据,当然这也算是bug吧. 如图:“经营范围”的值严重超出父容器长度,并且没有像“服务信息”一样折行显示.这种情 ...

  3. tensorflow 指定使用gpu处理,tensorflow占用多个GPU但只有一个在跑

    我们在刚使用tensorflow的过程中,会遇到这个问题,通常我们有多个gpu,但是 在通过nvidia-smi查看的时候,一般多个gpu的资源都被占满,但是只有一个gpu的GPU-Util 和 21 ...

  4. SAP自开发程序

    1.显示/查找SAP所有可执行程序清单,双击事务码执行. *&----------------------------------------------------------------- ...

  5. CSS 美化radio checkbox

    CSS 样式 <style type="text/css"> .option-input { -webkit-appearance: none; -moz-appear ...

  6. git桌面工具下载git源码

    第一步,登陆githup,搜索自己需要查看的代码. 并复制clone url. 第二步,复制下载资源:选择菜单--FILE--CLONE

  7. 修改Eclipse主题与Eclipse中使用SVN

    自从开始IDEA后,很久没用eclipse了,有位老同学问我eclipse中如何使用SVN?我就打开eclipse试试,白光太刺眼了~作为强迫症修改下主题.结果如下: 修改完编辑的背景颜色,并没有很好 ...

  8. 限制IP远程访问

    方法一:通过hosts.allow和hosts.deny文件进行ip限制 在/etc/目录下,同时存在hosts.allow和hosts.deny文件 如果我们希望某些ip不能访问,那么我们可以打开h ...

  9. 第十一章 串 (a)ADT

  10. 我和struts2 的第一天

    文字解析 1.获取正文请求 2.根据请求做出判断 3.执行具体的方法代码 4.跳转页面,展示给用户 Strut 是Apache发行的MVC框架 他只是表现层的框架 Strut1 是2005年流行的框架 ...