Android开发之利用ViewPager实现页面的切换(仿微信、QQ)
这里利用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)的更多相关文章
- Android开发之利用ViewPager实现在Activity或Fragment中引入别的布局文件实现滑动并进行页面跳转
有些时候经常可以看到其他APP中有一排的图标,可以在一个界面中滑来滑去,并且图标可以进行点击事件进行页面的跳转.这里对这种方法的实现做出总结. 首先看一下图片: 下面这两种图片是在一个Fragment ...
- Android中Fragment和ViewPager那点事儿(仿微信APP)
在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...
- Android开发之利用SQLite进行数据存储
Android开发之利用SQLite进行数据存储 Android开发之利用SQLite进行数据存储 SQLite数据库简单介绍 Android中怎样使用SQLite 1 创建SQLiteOpenHel ...
- 转:Android ViewPager多页面滑动切换以及动画效果
一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式, 白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了 ...
- Android开发UI之ViewPager及PagerAdapter
ViewPager,官网链接--http://developer.android.com/reference/android/support/v4/view/ViewPager.html ViewPa ...
- Android ViewPager多页面滑动切换以及动画效果
一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式,白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了, ...
- Android——ViewPager多页面滑动切换以及动画效果
一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式,白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了, ...
- android开发学习之ViewPager滑动事件讲解
android ViewPager滑动事件讲解 今天在做项目的时候,由于要处理viewPager页面滑动的事件,所以对其进行了一个小小的研究: 首先ViewPager在处理滑动事件的时候要用到OnPa ...
- Android开发实战之ViewPager实现向导界面
当我们更新应用,或者第一次进入应用时都会有一个向导界面,介绍这个app的内容和使用方式. 如果你细心你会发现其实这就是个viewpager,本篇博文将介绍应用的向导界面是如何制作的.希 望本篇博文对你 ...
随机推荐
- 第七次Scrum冲刺
第七次Scrum冲刺 1.今日完成的任务 队员 今日完成任务 刘佳 前端与后端对接 李佳 后端与数据库对接 周世元 数据库与后端对接 杨小妮 博客编写 许燕婷 管理团队当日及次日任务 陈水莲 综合测试 ...
- 吴裕雄 python oracle操作数据库(4)
import cx_Oracle conn = cx_Oracle.connect("scott/admin@localhost:1521/orcl")cursor = conn. ...
- opencv输出图片像素值
需求:在控制台输出灰度图像的像素值 代码: #include <stdio.h> #include <iostream> #include <opencv2/core/c ...
- 指向字符串的指针和char类型的数组
指针数组的效率比二维字符数组的效率高 指针数组不能修改字符串字面量,而二维字符数组中的内容可以更改
- Stm32 资料
http://i.youku.com/i/UODMyMTgwNTY=?spm=a2hzp.8253869.0.0 http://blog.sina.cn/dpool/blog/s/blog_14f65 ...
- Linux 安装nginx 及配置
安装openssl库 # yum install -y openssl openssl-devel 安装gcc # yum install gcc-c++ 安装 PCRE # yum ...
- java 开学第四周
package english; import java.io.File; import java.util.Scanner; import java.io.FileNotFoundException ...
- 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 ...
- PyCon大会Python主题演讲摘要
PyCon 是全国际最大的以 Python 编程言语 为主题的技能大会.大会由 Python 社区组织,每年举行一次.在大会上,来自国际各地的 Python 用户与中心开发者齐聚一堂,共同同享 Pyt ...
- 最小k度限制生成树
[题目描述] 给你一个图,n个点,m条边,求一颗生成树满足如下条件: (1)结点1的度不超过k. (2)在(1)条件下所求生成树最小. [算法引入] 最小k度限制生成树,就是指有特殊的某一点的度不能超 ...