Activity转场动画遇到的问题

前言

对于Activity的转场动画,Google官方也提供了相应的Api,供开发者简单实现Activity之间切换的动画效果.添加动画效果也不难,但是最近开发中添加的切换动画效果却都不生效,究其一般之后是解决了,但想想也需要做个小总结,对于这些常用点的细节得把握好,那怎能少了总结记录.


Ⅰ. Activity转场动画(overridePendingTransition)

下面这个Api是经常用来实现Activity之间切换的动画效果的,对其应该都不陌生。

overridePendingTransition(enterAnim, exitAnim);

在最近的开发中,我就是用这个Api来实现Activity间动画切换的效果,但是却不生效,下面是主要的实现代码.运行之后,切换动画效果却都不生效.

//启动Activity
public void onStartActivity(){

    Intent intent = new Intent(getActivity(),UpgradeActivity.class);
    mActivity.overridePendingTransition(R.anim.activity_zoom_enter_in,                                 R.anim.activity_zoom_exit_out);
    mActivity.startActivity(intent);
}

public void onCancel(View v) {
        UpgradeActivity.this.overridePendingTransition(R.anim.activity_zoom_enter_in,R.anim.activity_zoom_exit_out);
        finish();  
}

@Override
public void onBackPressed() {       
     super.onBackPressed();     
     UpgradeActivity.this.overridePendingTransition (R.anim.activity_zoom_enter_in,R.anim.activity_zoom_exit_out);
}

对照了之前写过的 overridePendingTransition 切换代码,原来overridePendingTransition 这个Api,还是有些细节得注意:

  • 1、必须在 StartActivity() 或 finish() 之后立即调用;
  • 2、而且在 2.1 以上版本有效;
  • 3、手机设置-显示-动画,要开启状态.

到这里,应该知道上面的动画为什么不生效咯,是提前调用了 overridePendingTransition.

Ⅱ. Activity转场动画(ActivityOptions)

实现Activity之间的动画切换效果的方式有很多种,V4包里有 ActivityOptionsCompat 这个类,同样可以用其实现,下面是这个类里主要的静态方法.

ActivityOptionsCompat.makeSceneTransitionAnimation();
ActivityOptionsCompat.makeThumbnailScaleUpAnimation()
ActivityOptionsCompat.makeCustomAnimation()
ActivityOptionsCompat.makeScaleUpAnimation()
ActivityOptionsCompat.makeClipRevealAnimation()

在使用这个类的过程中还是遇到点问题,关闭页面的时候,调用ActivityCompat.finishAfterTransition方法,并没有动画切换的效果,可能跟系统版本这些有问题吧,毕竟ActivityOptions类的出现就是为了兼容Activity之间的转场动画,那么也没继续去探讨了,结束的时候用overridePendingTransition进行操作关闭,下面是大致的实现代码:

//启动Activity
public void onStartActivity(){

    Intent intent = new Intent(getActivity(), UpgradeActivity.class);      
    ActivityOptionsCompat compat = ActivityOptionsCompat.makeCustomAnimation(mActivity,R.anim.activity_zoom_enter_in, R.anim.activity_zoom_exit_out);
    ActivityCompat.startActivity(mActivity,intent,compat.toBundle());

}

public void onCancel(View view){
    //ActivityCompat.finishAfterTransition(this);
    finish();
    UpgradeActivity.this.overridePendingTransition(R.anim.activity_zoom_enter_in,R.anim.activity_zoom_exit_out);        
}

@Override
public void onBackPressed() {
       super.onBackPressed();           
    //ActivityCompat.finishAfterTransition(this);
    UpgradeActivity.this.overridePendingTransition  (R.anim.activity_zoom_enter_in,R.anim.activity_zoom_exit_out);
}

Ⅲ. 写写总结,烦躁的心才能够静下来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个安卓使用 XML 写动画的示例: 首先,在 res 目录下创建一个新的 XML 文件,例如 transition.xml,然后在其中添加一个 transition 元素,指定动画的类型和时长,例如: ```xml <?xml version="1.0" encoding="utf-8"?> <transitionSet xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:transitionOrdering="together"> <changeBounds /> <changeTransform /> <changeClipBounds /> <changeImageTransform /> </transitionSet> ``` 在这个示例中,我们使用了一个 transitionSet 元素,它包含了四个子元素,分别是 changeBounds、changeTransform、changeClipBounds 和 changeImageTransform,它们分别表示不同方面的动画效果。 changeBounds 表示在 View 位置和大小发生变化时播放动画,changeTransform 表示在 View 的旋和缩放发生变化时播放动画,changeClipBounds 表示在 View 的裁剪区域发生变化时播放动画,changeImageTransform 表示在 ImageView 的图像变化时播放动画。 接下来,在你的 Java 代码中,使用 ActivityOptionsCompat 对象指定动画的类型和时长,例如: ```java ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation( this ).setDuration(500); ``` 最后,在启动动画目标 Activity 时,调用 startActivity() 方法,并传入上面创建的 options 对象,例如: ```java Intent intent = new Intent(this, TargetActivity.class); startActivity(intent, options.toBundle()); ``` 当目标 Activity 启动时,动画就会自动播放。 希望这个示例能够帮助你使用 XML 实现自己的动画

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值