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,本篇博文将介绍应用的向导界面是如何制作的.希 望本篇博文对你 ...
随机推荐
- Structs复习 Result第一部分
Jar包 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=&q ...
- centos 安装python3.6
环境准备 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel 首先去官网下 ...
- Java8给出一个时间段,计算该时间范围由哪些日期(天)和月份组成
1. 判断时间段是否合法: 2. 循环判断记录数是否大于0 3. 根据起始时间算出该月的第一天.最后一天和这个月有多少天: 4. 判断起始时间是否是该月第一天,如果是,再判断结束时间与该月最后一天的大 ...
- &符号 (弃用引用传参了,不要用!!)
写法一 $age = function grow($age) { $age += ; return $age; } echo grow($age) echo $age 写法二 $age = funct ...
- Java多线程及线程状态转换
以下内容整理自:http://blog.csdn.net/wtyvhreal/article/details/44176369 线程:是指进程中的一个执行流程. 线程与进程的区别:每个进程都需要操作 ...
- 【Scheme】cons的过程性实现
(define (cons x y) (define (dispatch m) (cond ((= m 0) x) ((= m 1) y))) dispatch) (define (car z) (z ...
- 用PLSQL Developer 查看Oracle的存储过程
1 2.输入 3.具体存储过程
- C# sqlserver ExecuteNonQuery()方法详解
关于ExecuteNonQuery() 方法以前对这个一直都没在意,基本上都没有用其返回值,查了一下MSDN,如下:SqlCommand.ExecuteNonQuery 方法对连接执行 Transac ...
- express 学习札记
Enjoy yourself! 祝你玩得开心! I have no idea. 我没有头绪. I just made it! 我做到了! I’ll see to it 我会留意的. Express ...
- 问题1:jquery实现全选功能,第二次失效(已解决)
问题:使用了attr("checked",true”)设置子复选框的被选状态,第一次执行功能正常,但第二次失效. 解决方案:将attr("checked",tr ...