最近很多人来Fragment动画是很感兴趣,我将是一个样本给大家看。

既然做,我会做动画以下类型:

注入弹出动画:从“”进入。从“上下左右”弹出,当然,你怎么组合都能够。另外你也能够加一些透明度的变化,这就看你的发挥了。

。。

1.先写动画的xml文件

做开发的都知道。在/res/anim/文件夹下,新建xml的动画文件。比方:

fragment_slide_in_from_bottom.xml

<?

xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="800"
android:fromYDelta="100.0%p"
android:interpolator="@android:anim/decelerate_interpolator"
android:toYDelta="0.0" />

fragment_slide_in_from_left.xml

<?

xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="800"
android:fromXDelta="-100.0%p"
android:interpolator="@android:anim/decelerate_interpolator"
android:toXDelta="0.0" />

fragment_slide_in_from_right.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="800"
android:fromXDelta="100.0%p"
android:interpolator="@android:anim/decelerate_interpolator"
android:toXDelta="0.0" />

fragment_slide_in_from_top.xml

<?xml version="1.0" encoding="utf-8"?

>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="800"
android:fromYDelta="-100.0%p"
android:interpolator="@android:anim/decelerate_interpolator"
android:toYDelta="0.0" />

上面的是进入动画。至于弹出动画,仅仅须要将from和to的值翻转一下就可以。你们都懂得,不懂得,直接去github上clone,地址在以下。

2.加入Fragment的时候,使用setCustomAnimations方法。

直接贴代码。简单明了。

package com.example.testfragment;

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
*
* @author Zheng Haibo
* @web http://www.mobctrl.net
*
*/
public class MainActivity extends ActionBarActivity { private FragmentManager fragmentManager; private Button northBtn;
private Button southBtn;
private Button eastBtn;
private Button westBtn;
private Button popBtn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getSupportFragmentManager();
initButton();
} private void initButton() {
northBtn = (Button) findViewById(R.id.btn_north);
southBtn = (Button) findViewById(R.id.btn_south);
eastBtn = (Button) findViewById(R.id.btn_east);
westBtn = (Button) findViewById(R.id.btn_west);
popBtn = (Button) findViewById(R.id.btn_pop);
northBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
addNorthFragment();
}
});
southBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
addSouthFragment();
}
});
eastBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
addEastFragment();
}
});
westBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
addWestFragment();
}
}); popBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
fragmentManager.popBackStack();
}
}); } private void addNorthFragment() {
addFragment(R.anim.fragment_slide_in_from_top,
R.anim.fragment_slide_out_to_top,
R.anim.fragment_slide_in_from_top,
R.anim.fragment_slide_out_to_top, 0xa0ff0000);
} private void addSouthFragment() {
addFragment(R.anim.fragment_slide_in_from_bottom,
R.anim.fragment_slide_out_to_bottom,
R.anim.fragment_slide_in_from_bottom,
R.anim.fragment_slide_out_to_bottom, 0xa000ff00);
} private void addEastFragment() {
addFragment(R.anim.fragment_slide_in_from_left,
R.anim.fragment_slide_out_to_left,
R.anim.fragment_slide_in_from_left,
R.anim.fragment_slide_out_to_left, 0xa00000ff);
} private void addWestFragment() {
addFragment(R.anim.fragment_slide_in_from_right,
R.anim.fragment_slide_out_to_right,
R.anim.fragment_slide_in_from_right,
R.anim.fragment_slide_out_to_right, 0xa0ff00ff);
} /**
* add the fragment
*
* @param arg0
* @param arg1
* @param arg2
* @param arg3
* @param color
*/
private void addFragment(int arg0, int arg1, int arg2, int arg3, int color) {
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setCustomAnimations(arg0, arg1, arg2, arg3);
MyFragment fragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putInt("color", color);
fragment.setArguments(bundle);
ft.add(R.id.rl_container, fragment);
ft.addToBackStack(null);
ft.commitAllowingStateLoss();
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}

非常炫的GIF效果,我就不贴了,你下载试试就知道了。

。

Github: https://github.com/nuptboyzhb/FragmentAnimationDemo

兴许问题:

animation的运行是异步的。

假设你想对animation的运行进行监听,你能够重写fragment里面的例如以下方法

/**
* if you need add animation listener for the fragment
* please use this method
*/
@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
Animation anim;
if (enter) {
anim = AnimationUtils.loadAnimation(getActivity(),
android.R.anim.fade_in);
} else {
anim = AnimationUtils.loadAnimation(getActivity(),
android.R.anim.fade_out);
} anim.setAnimationListener(new AnimationListener() {
public void onAnimationEnd(Animation animation) { } public void onAnimationRepeat(Animation animation) { } public void onAnimationStart(Animation animation) { }
}); return anim;
}

然后在回调里,做你想做的事

-------------------------------------------------------------------

很多其它交流,Android开发联盟QQ群:272209595

版权声明:本文博客原创文章,博客,未经同意,不得转载。

android:Fragment动画的东西的更多相关文章

  1. Android -- Fragment动画异常Unknown animation name: objectAnimator

    异常 Caused by: java.lang.RuntimeException: Unknown animation name: objectAnimator 异常代码 FragmentTransa ...

  2. [Android]Fragment自定义动画、动画监听以及兼容性包使用

    Fragment是Android在API 11之后加入的一个组件,对提高Android开发中的布局合理性和布局效率都有很大作用,尤其是在Android平板等大屏幕设备的开发中,Fragment的引入能 ...

  3. Android Fragment 解析和使用

    Android Fragment的生命周期和Activity类似,实际可能会涉及到数据传递,onSaveInstanceState的状态保存,FragmentManager的管理和Transactio ...

  4. Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误

    嵌套Fragment的使用及常见错误 嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment. 使用时, 主要要依靠宿主Fragment的 ge ...

  5. Android Fragment使用(一) 基础篇 温故知新

    Fragment使用的基本知识点总结, 包括Fragment的添加, 参数传递和通信, 生命周期和各种操作. Fragment使用基础 Fragment添加 方法一: 布局里的标签 标识符: tag, ...

  6. Android Fragment

    1.Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期. 2.Fragment 生命周期: 首页 最新文章 在线课程 业界 开发 ...

  7. Android Fragment完全解析

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8881711 我们都知道,Android上的界面展示都是通过Activity实现的, ...

  8. Android Fragment完全解析,关于碎片你所需知道的一切

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8881711 我们都知道,Android上的界面展示都是通过Activity实现的, ...

  9. Android Fragment 生命周期及其API使用(建议使用自定义View替换Fragment)

    我为什么不主张使用Fragment Fragment:( Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理 ) 生命周期回调说明: onAttach ...

随机推荐

  1. Android开发系列(十九个):至SimpleAdapter设置样式

    Adapter任务:在数据adapter处理后做.展会上的观点 对于一般ArrayAdapter供.传递给ArrayAdapter之后就能够在视图上用一个列表显示出这个字符串数组. 比例如以下边的代码 ...

  2. Content://sms

    package com.example.sms; import android.app.Activity; import android.app.Notification; import androi ...

  3. 一个关于Linux Bridge配置的吐嘈

    话说有些事情十分适合在放假前的一天折腾一天,但绝对不适合在你准备去吃饭前多看一眼...我上周就碰到了这么一件揪心的事,终于以低血糖收场.十分狼狈地四处觅食,却觅到了一包超级辣的鸡爪.吃完后感觉症状加重 ...

  4. 为网站添加IE6升级提示

    原文 为网站添加IE6升级提示 IE6的是一款横跨十年的浏览器,作为一枚前端,对其已经失望透顶,但其在中国的市场比仍旧很高,中国大量的PC上安装的都是盗版Windows XP,而Windows XP上 ...

  5. hdu 4035 Maze(期待更多经典的树DP)

    Maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submi ...

  6. 大数据下的数据分析平台架构zz

    转自http://www.cnblogs.com/end/archive/2012/02/05/2339152.html 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海 ...

  7. JavaEE(12) - JPA规范及实现(TopLink和Hibernate)

    1. JPA规范与ORM框架之间的联系 JPA规范并不属于EJB3规范,它是一套完全独立的规范,不仅可以在基于EJB的JavaEE应用程序中使用,而且完全可以在普通JavaSE应用程序中使用. JPA ...

  8. eclipse 对齐行号在括号中显示和字体调整

    笔者 : 本笃庆军 一.括号对齐:指和C/C++里面一样.上下括号对齐~~~ 第一步:Project->preferences->Java->Code Style->Forma ...

  9. 同一个ASP.NET页面放置多个UpdatePanel分别刷新的解决办法。.

    原文:同一个ASP.NET页面放置多个UpdatePanel分别刷新的解决办法.. ScriptManager添加EnablePartialRending属性 <asp:ScriptManage ...

  10. JavaEE(6) - JMS消息选择和查看

    1. JMS消息的类型.消息头和消息属性 消息类型: StreamMessage MapMessage TextMessage ObjectMessage BytesMessage JMS消息中的消息 ...