动画[2]TweenAnimation 使用场景

【参考链接】

 

TweenAnimation常用于View的动画,

 

View

View提供了startAnimation()cancelAnimation()用于开始、停止一个动画

还有setAnimation(),它只是设置Animation的启动时间并附加到View上,需要自己重绘触发开始动画,startAnimation()内部就是这样

 

ViewGroup

可以为ViewGroup指定layoutAnimation属性,这样当此ViewGroupaddView()添加到窗口上的时候,此ViewGroup中的子View就会以一定的动画形式出现。

以如下代码为例

1.     LinearLayout指定layoutAnimation属性

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
android:orientation="vertical"
   
android:layoutAnimation="@anim/anim_ll"
   
>

 

2.     anim_ll文件如下

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation
xmlns:android="http://schemas.android.com/apk/res/android"
   
android:animation="@anim/anim_item"
   
android:animationOrder="normal"
   
android:delay="0.5">
</layoutAnimation>

其中

animation指示每个子View的动画

animationOrder指示子View播放动画的顺序

delay指示每个子View播放动画的延时,系统默认子View入场动画的时间周期为300ms,那么0.5就表示第一个子View延时150ms开始播放动画,第二个子View延时300ms开始播放动画

 

3.     View的入场动画anim_item如下

<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
   
android:duration="300"
   
android:interpolator="@android:anim/accelerate_interpolator"
   
android:shareInterpolator="true">

    <alpha
       
android:fromAlpha="0.0"
       
android:toAlpha="1.0" />

    <translate
       
android:fromXDelta="500"
       
android:toXDelta="0" />

</set>

 

当添加此LinearLayout的时候动画效果如下



上述效果也可以通过java代码setLayoutAnimation()来实现

ViewGroup inflate =(ViewGroup) getLayoutInflater().inflate(R.layout.linearlayout, null);

Animation animation= AnimationUtils.loadAnimation(this, R.anim.anim_item);
LayoutAnimationControllercontroller = new LayoutAnimationController(animation);
controller.setDelay(0.5f);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
inflate.setLayoutAnimation(controller);

 

Activity

startActivity()finish()时,会进行Activity的切换

Activity有默认的切换效果,但是这个效果我们是可以自定义的。主要通过overridePendingTransition()方法

public void overridePendingTransition(int enterAnim, int exitAnim)

enterAnim指定新打开的Activity要进行的动画,

exitAnim指定要关闭的Activity要进行的动画

 

我们可以在startActivity()finish()方法后调用这个方法。如下

enter_anim,从下向上移动,从透明到不透明

<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
   
android:duration="300"
   
android:interpolator="@android:anim/accelerate_interpolator"
   
android:shareInterpolator="true" >

    <alpha
       
android:fromAlpha="0.0"
       
android:toAlpha="1.0" />

    <translate
       
android:fromYDelta="500"
       
android:toYDelta="0"/>

</set>

 

exit_anim,从上向下移动,从不透明到透明

<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
   
android:duration="300"
   
android:interpolator="@android:anim/accelerate_interpolator"
   
android:shareInterpolator="true" >

    <alpha
       
android:fromAlpha="1.0"
       
android:toAlpha="0" />

    <translate
       
android:fromYDelta="0"
       
android:toYDelta="500" />

</set>

 

在前一个Activity打开后一个Activity时,在startActivity()后调用overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);

前一个Activity会执行exit动画,后一个Activity会执行enter动画

public void start(View view){
    Intent intent =
new Intent(this, SecondActivity.class);
   
startActivity(intent);
   
overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值