当前位置: 代码迷 >> Android >> Android fragment退出view时如何设置退出动画?
  详细解决方案

Android fragment退出view时如何设置退出动画?

热度:22   发布时间:2016-04-28 02:41:15.0
Android fragment退出view时怎么设置退出动画?求救...
我的项目是这样的:点击 图1 的item项,就打开对应的图2页面。这个是fragment做的,相信大家都知道。现在我要的效果就是,当点击图2左上角的返回按钮时,图2消失,显示图1,这个图2消失的过程不是闪一下就没了,而是要慢慢向右边滑动出去,请问这个该怎么实现?

图1:


图2:

------解决思路----------------------
	/**
 * 切换Fragment
 * @param fragment
 * @param isFirst
 */
protected void change(Fragment fragment, boolean isFirst) {
FragmentTransaction t = this.fragmentManager.beginTransaction();
setCustomAnimations(R.anim.push_left_in, R.anim.push_left_out, t);
t.replace(R.id.container, fragment);
if (!isFirst) {
t.addToBackStack(null);
}
t.commit();
}


R.anim.push_left_in:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="800" />

</set>


上面是我写的,用法就是这样,具体的你再斟酌一下!
------解决思路----------------------
简单的动画就可以实现了啊。针对你的问题粗略的写了个,你自己优化下。
public class MainActivity extends Activity {

private ObjectAnimator outAnimator, inAnimator;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//你的两个布局
View viewOut = LayoutInflater.from(this).inflate(
R.layout.activity_main, null);
View viewIn = LayoutInflater.from(this).inflate(R.layout.XXX, null);
// 初始化动画
outAnimator(viewOut);
inAnimator(viewIn);

//监听动画过程
viewOut.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
outAnimator.start();
outAnimator.addListener(new AnimatorListener() {

// 如果要2个动画一起动,那么实现这个方法
public void onAnimationStart(Animator animation) {
// TODO Auto-generated method stub
inAnimator.start();
}

@Override
public void onAnimationRepeat(Animator animation) {
// TODO Auto-generated method stub

}

// 如果要先让出动画完成后,再实现进动画;那么用这个方法
@Override
public void onAnimationEnd(Animator animation) {
// TODO Auto-generated method stub
// inAnimator.start();
}

@Override
public void onAnimationCancel(Animator animation) {
// TODO Auto-generated method stub

}
});
}
});
}

// 出动画.注意v.getWidth()是你布局的宽度,也可以说是你手机的屏幕宽度.
public void outAnimator(View v) {
outAnimator = ObjectAnimator.ofFloat(v, "translationX", 0.0f,
v.getWidth());
outAnimator.setInterpolator(new LinearInterpolator());
outAnimator.setDuration(500);
}

private void inAnimator(View v) {
inAnimator = ObjectAnimator.ofFloat(v, "translationX", -v.getWidth(),
0.0f);
inAnimator.setInterpolator(new LinearInterpolator());
inAnimator.setDuration(500);
}
}
  相关解决方案