Android fragment退出view时怎么设置退出动画?求救…

移动开发 码拜 6年前 (2015-05-10) 936次浏览 0个评论

我的项目是这样的:点击 图1 的item项,就打开对应的图2页面。这个是fragment做的,相信大家都知道。现在我要的效果就是,当点击图2左上角的返回按钮时,图2消失,显示图1,这个图2消失的过程不是闪一下就没了,而是要慢慢向右边滑动出去,请问这个该怎么实现?

图1:
Android fragment退出view时怎么设置退出动画?求救...

图2:
Android fragment退出view时怎么设置退出动画?求救...

PendingIntent 
引用 1 楼 u010911576 的回复:

PendingIntent 

????????

10分
	/**
	 * 切换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>

上面是我写的,用法就是这样,具体的你再斟酌一下!

引用 3 楼 u010853225 的回复:
	/**
	 * 切换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();
	}

你那不是替换吗!我要的是退出动画呀。
getFragmentManager().popBackStack();//退出

引用 3 楼 u010853225 的回复:
	/**
	 * 切换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>

上面是我写的,用法就是这样,具体的你再斟酌一下!

但是我这个并不是两个fragment同时滑动,也就是说一进一出,所以图2进入动画有,但退出动画就没有了,怎么设置?

30分
简单的动画就可以实现了啊。针对你的问题粗略的写了个,你自己优化下。
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);
}
}

引用 6 楼 u012137924 的回复:

简单的动画就可以实现了啊。针对你的问题粗略的写了个,你自己优化下。

你好,麻烦你先好好看看我想实现的效果图:
Android fragment退出view时怎么设置退出动画?求救...

晕,表情是怎么上去的。对了,上面的动画监听里面还可以添加渐变等等效果,也就是集成动画,不过有点取巧,呵呵,可以用AnimatorSet这个类去搞,里面有个animatorSet.playTogether(items);这个方法可以把你想要的动画全部加载进去。
顺便问句,你的项目是 本地,在线 双用的吗?
你的效果就是类似Gallery的效果是吧?
view 由你自己指定啊。。。
引用 8 楼 u012137924 的回复:

晕,表情是怎么上去的。对了,上面的动画监听里面还可以添加渐变等等效果,也就是集成动画,不过有点取巧,呵呵,可以用AnimatorSet这个类去搞,里面有个animatorSet.playTogether(items);这个方法可以把你想要的动画全部加载进去。
顺便问句,你的项目是 本地,在线 双用的吗?

目前还没有做在线的,效果跟viewpage差不多吧!但是左图里面本身就有一个了,现在实现的只有右图的进入动画,左图的一点效果都没有。

fragManage = MainActivity.this.getSupportFragmentManager();
			FragmentTransaction transion = fragManage.beginTransaction();
			FragmentInfoContent infocon = new FragmentInfoContent(
					MainActivity.this, play, musicName, main_top, scroll,
					cursor_layout, pager,transion);

			main_top.setVisibility(View.GONE);
			scroll.setVisibility(View.GONE);
			cursor_layout.setVisibility(View.GONE);
			pager.setVisibility(View.GONE);

			transion.setCustomAnimations(R.anim.push_left_in, R.anim.push_left_out);
			transion.replace(R.id.activity_lin_title, infocon);
			transion.addToBackStack(null);
			//transion.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);// 设置动画效果
			transion.commit();

代码里的隐藏部分,是因为无论哪个界面都要看到背景图,所以两个view的背景都是透明的,这样一来左图的内容就先隐藏了,不然右图替换过来,还会看到左图的内容。

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

// 初始化动画
outAnimator(viewOut);
inAnimator(viewIn);

左图的初始化了没,监听器里面做,顺便说下,动画可以做成res目录下面的.xml文件。你可以先新建一个新文件来测试下,应该是没有问题的,如果还需要反向动画的话,那么在动画里面的参数改下就OK了。

outAnimator.addListener(new AnimatorListener()  可以放在public void outAnimator(View v) 方法里面。

引用 10 楼 u012137924 的回复:

view 由你自己指定啊。。。

你好,要不这样,我发给你一个我开始做的时候,写的一个类似的小demo,你帮我看看怎么实现好么?

要做成,xml文件的话,需要在res 目录下新建文件夹animator,注意不是anim,关于这个你可以去找找资料。这里说太浪费时间了。呵呵。等过年放假的时候,我准备写几篇总结的博客,届时希望捧个场。
兄弟,你新建一个APP然后做两个布局,然后试验我给的代码,这个很简单啊。就是一个TranslationX而已。当然,里面还可以加上渐变效果,我现在也在做项目,呵呵,偷空上来看看的。加油!
引用 14 楼 u012137924 的回复:

要做成,xml文件的话,需要在res 目录下新建文件夹animator,注意不是anim,关于这个你可以去找找资料。这里说太浪费时间了。呵呵。等过年放假的时候,我准备写几篇总结的博客,届时希望捧个场。

晕,好啊,你把邮箱告诉我,我发给你,你帮我看怎么实现嘛,我很差的,你说那么多我都不太明白。

引用 15 楼 u012137924 的回复:

兄弟,你新建一个APP然后做两个布局,然后试验我给的代码,这个很简单啊。就是一个TranslationX而已。当然,里面还可以加上渐变效果,我现在也在做项目,呵呵,偷空上来看看的。加油!

你的代码都不是fragment的呀!直接两个view跳转的,我的是fragment的

fragment 的布局文件   R.layout.XXX  至于底部那个东西,可以做个popupWindow来实现。
View viewIn = LayoutInflater.from(this).inflate(R.layout.XXX, null);  
//this指的是Context
//R.layout.XXX 由你掌控,一般是子布局,适配器里面经常用到的啊。当然也有addView的时候。

android里面貌似除了4大组件 + Intent,像控件,布局这些都是View或ViewGroup.你项目里的布局文件.xml就是View.这个动画很简单了,你先把思路捋清楚吧。

你好!我也是遇到这个问题,请问你的问题解决了吗?怎么解决的?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Android fragment退出view时怎么设置退出动画?求救…
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!