跳转activity的动画实现
程序员文章站
2022-05-03 08:24:17
...
前言
我看到博客上有很多关于跳转activity动画的实现,也是借鉴博客上的方法实现的,这里我只记录一点关于跳转加速器的设置。为后续自己使用能快速找到,大家一起学习。
实现步骤:
一:先在res文件下创建anim文件来放置xml动画文件,一般动画会有两个,activity A跳转到其他activity B的动画和activity A本身退出时的动画。这里我们新建zoomin.xml表示跳转动画。zoomout表示本activity退出去时候的动画。
zoomin代码如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
//加速器在这,可根据需求替换
android:interpolator="@android:anim/decelerate_interpolator">
<scale android:fromXScale="0.1" android:toXScale="1.0"
android:fromYScale="0.1" android:toYScale="1.0"
android:pivotX="50%p" android:pivotY="50%p"
android:duration="2000" />
<!-- 这里为了看到动画演示效果,把动画持续时间设为3秒 -->
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="2000" />
</set>
zoomout代码如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
//加速器在这,可以根据需求替换
android:interpolator="@android:anim/overshoot_interpolator"
android:zAdjustment="top">
<scale android:fromXScale="1.0" android:toXScale="0.5"
android:fromYScale="1.0" android:toYScale="0.5"
android:pivotX="50%p" android:pivotY="50%p"
android:duration="1000" />
<!-- 系统内置的动画持续时间
android:duration="@android:integer/config_mediumAnimTime"
-->
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="1000"/>
</set>
二、使用这两个动画。
我们可以在activity跳转时和activity finish的调用。具体如下
Intent intent = new Intent(AppDetailActivity.this,LookPictureActivity.class);
intent.putExtra("pageTotalSize",list.size());
intent.putExtra("curPage",position);
intent.putExtra("curIcon",list.get(position));
intent.putExtra("appImagList",(Serializable)list);
startActivity(intent);
//这里就是调用动画的地方
overridePendingTransition(R.anim.zoomin, R.anim.zoomout);
LogUtil.d(WatchAppStoreConstant.TAG,"position = " + position);
总结:
这里我主要记录下加速器,这是从其他博客转的,感谢猴子。
android:interpolator="@android:anim/accelerate_interpolator" 设置动画为加速动画(动画播放中越来越快)
android:interpolator="@android:anim/decelerate_interpolator" 设置动画为减速动画(动画播放中越来越慢)
android:interpolator="@android:anim/accelerate_decelerate_interpolator" 设置动画为先加速在减速(开始速度最快 逐渐减慢)
android:interpolator="@android:anim/anticipate_interpolator" 先反向执行一段,然后再加速反向回来(相当于我们弹簧,先反向压缩一小段,然后在加速弹出)
android:interpolator="@android:anim/anticipate_overshoot_interpolator" 同上先反向一段,然后加速反向回来,执行完毕自带回弹效果(更形象的弹簧效果)
android:interpolator="@android:anim/bounce_interpolator" 执行完毕之后会回弹跳跃几段(相当于我们高空掉下一颗皮球,到地面是会跳动几下)
android:interpolator="@android:anim/cycle_interpolator" 循环,动画循环一定次数,值的改变为一正弦函数:Math.sin(2* mCycles* Math.PI* input)
android:interpolator="@android:anim/linear_interpolator" 线性均匀改变
android:interpolator="@android:anim/overshoot_interpolator" 加速执行,结束之后回弹
animation.setInterpolator(new AccelerateInterpolator());
animation.setInterpolator(new DecelerateInterpolator());
animation.setInterpolator(new AccelerateDecelerateInterpolator());
animation.setInterpolator(new AnticipateInterpolator());
animation.setInterpolator(new AnticipateOvershootInterpolator());
animation.setInterpolator(new BounceInterpolator());
animation.setInterpolator(new CycleInterpolator(2));
animation.setInterpolator(new LinearInterpolator());
animation.setInterpolator(new OvershootInterpolator());
上面的加速器顺序是一一对应的。动画不设置Interpolator属性即为默认值,匀速
Interpolator属性也可自定义