android:Fragment动画的东西
最近很多人来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动画的东西的更多相关文章
- Android -- Fragment动画异常Unknown animation name: objectAnimator
异常 Caused by: java.lang.RuntimeException: Unknown animation name: objectAnimator 异常代码 FragmentTransa ...
- [Android]Fragment自定义动画、动画监听以及兼容性包使用
Fragment是Android在API 11之后加入的一个组件,对提高Android开发中的布局合理性和布局效率都有很大作用,尤其是在Android平板等大屏幕设备的开发中,Fragment的引入能 ...
- Android Fragment 解析和使用
Android Fragment的生命周期和Activity类似,实际可能会涉及到数据传递,onSaveInstanceState的状态保存,FragmentManager的管理和Transactio ...
- Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
嵌套Fragment的使用及常见错误 嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment. 使用时, 主要要依靠宿主Fragment的 ge ...
- Android Fragment使用(一) 基础篇 温故知新
Fragment使用的基本知识点总结, 包括Fragment的添加, 参数传递和通信, 生命周期和各种操作. Fragment使用基础 Fragment添加 方法一: 布局里的标签 标识符: tag, ...
- Android Fragment
1.Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期. 2.Fragment 生命周期: 首页 最新文章 在线课程 业界 开发 ...
- Android Fragment完全解析
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8881711 我们都知道,Android上的界面展示都是通过Activity实现的, ...
- Android Fragment完全解析,关于碎片你所需知道的一切
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8881711 我们都知道,Android上的界面展示都是通过Activity实现的, ...
- Android Fragment 生命周期及其API使用(建议使用自定义View替换Fragment)
我为什么不主张使用Fragment Fragment:( Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理 ) 生命周期回调说明: onAttach ...
随机推荐
- [ACM] POJ 2342 Anniversary party (树DP获得冠军)
Anniversary party Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4410 Accepted: 2496 ...
- Xenomai 3 和 PREEMPT_RT 有哪些优势相比,
Q: 我可以在我的开发板PREEMPT_RT直接在内核环境中执行POSIX应用, 使用Xenomai3 这是什么原因它? A:假设你的应用程序已经完全是POSIX,而且性能也满足,则,而且也没有理由去 ...
- opencv在arm和x86在移植
一个.开发环境 操作系统:fedora14 Opencv版本号:2.0 Qt版本号:4.7 arm:mini6410 交叉编译工具:arm-linux-gcc-4.5.1 二.安装与配置 Linux系 ...
- atitit.提升稳定性---hibernate 添加重试retry 机制解决数据库连接关闭
atitit.提升稳定性---hibernate 添加重试retry 机制解决数据库连接关闭 1. 流程总结 retry(5times).invoke(xxx).test().rest().$() t ...
- Qt原始资源形象问题后删除
这些天Qt请项目超市收银系统,作为练一练手,无论如何,亦休闲亦无关,做几乎同样的.旨在取代以前的资源图片, 是什么改变了,码里面的路径都改了.还是编译只是去,总是提示这样一个错误. <s ...
- C编程的指针涛 ---第十笔记
//指针实例搜索算法 //迷宫算法 //搜索是最长的使用深度优先搜索和广度优先搜索 //作为名称作为一个深度优先搜索,每路一直在寻找到底. //为了防止想法,这样的数据结构 //使得每次找到思路的时候 ...
- Ubuntu 当黑屏解决方案安装
前几天我就已经安装Red hat 企业版,只是可惜它并没有提供数据源.我能够安装自己的软件,但我不能完全靠解决,因此,我们决定改变系统,最后我选择ubuntu.随时下载系统.然后用u盘制作启动盘,全部 ...
- dapper的Dapper-Extensions用法(一)
dapper的Dapper-Extensions用法(一) Dapper-Extensions Dapper Extensions is a small library that complement ...
- 他们控制的定义--让背景颜色变化ViewPager逐步幻灯片
转载请注明出处.谢谢~ 今天想说一个简单但很好的效果达到.代码是绝对简单,达到绝对easy,就是你可能想不到而已. 不多说,上效果图. 第一个效果是仿最美应用的滑动颜色变化,第二个是我项目中要用的效果 ...
- maven_修改setting ,改为自己私服或者OSC开源中国 [为解决sqlite-jdbc 在中央仓库找不到]
因为项目要使用到sqlite ,虽然有现成的jar,但是考虑的项目的易用统一管理,决定还是用maven 结果纠结了半天 sqlite-jdbc 在maven默认的仓库根本找不着,于是乎修改 setti ...