安卓动画入门教程 Animation in Android(2)

使用ViewPropertyAnimator

我们可以简简单单的使用ViewPropertyAnimator 系统,这个是建立在ObjectAnimator之上的。这个提供了一个更快的展示动画,提供了一个简单方法去应用动画

不使用支持库

如果我们不去适配3.0之前的设备,我们可以直接在view上运用animate方法

Button btnExample = (Button) findViewById(R.id.btnExample);
btnExample.animate().alpha(0.2f).xBy(-100).yBy(100);

animate 方法有众多的属性,大部分属性都ViewPropertyAnimator有对应的属性。比如说旋转,扩展大小,换位置等等,比如说下面这个复杂一点的例子

btnExample.animate().alpha(0.5f).rotation(90f).
  scaleX(2).xBy(100).yBy(100).setDuration(1000).setStartDelay(10).
  setListener(new AnimatorListenerAdapter() {
      @Override
      public void onAnimationStart(Animator animation) {
          Toast.makeText(MainActivity.this, "Started...", Toast.LENGTH_SHORT).show();
      };
  });

它支持多个动画的属性,你可以平行的设置他,比如说透明度的变化、喧杂混等等。这里我们同来那个可以设置周期,延迟开始动画甚至是设置一个listener。

使用支持库

如果你打算在3.0之前的是悲伤使用,你可以使用支持库的静态方法ViewCompat.animate,如果你是用sudio,你首先要加上依赖

compile 'com.android.support:support-v4:23.1.0'

我们现在可以这样做

Button btnExample = (Button) findViewById(R.id.btnExample);
ViewCompat.animate(btnExample).alpha(0.2f).xBy(-100).yBy(100);

使用xml

我们可以使用xml来定义动画属性,我需要做的只是创建一个xml文件燃火把动画的属性加上,比如说我们打算给button加上淡出的效果,我们可以把xml加入res/animator/fade_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="alpha"
    android:duration="1000"
    android:valueTo="0" />

在activity中这样使用

Animator anim = AnimatorInflater.loadAnimator(this, R.animator.fade_out);
anim.setTarget(btnExample);
anim.start();

定义一系列的动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="together" >
    <objectAnimator
        android:propertyName="alpha"
        android:valueTo="0.5" >
    </objectAnimator>
    <objectAnimator
        android:propertyName="rotation"
        android:valueTo="90.0" >
    </objectAnimator>
    <objectAnimator
        android:propertyName="scaleX"
        android:valueTo="2.0" >
    </objectAnimator>
    <objectAnimator
        android:propertyName="translationX"
        android:valueTo="100.0" >
    </objectAnimator>
    <objectAnimator
        android:propertyName="translationY"
        android:valueTo="100.0" >
    </objectAnimator>
</set>
Animator anim = AnimatorInflater.loadAnimator(this, R.animator.multi_button);
anim.setTarget(tvBlah);
anim.setDuration(1000);
anim.setStartDelay(10);
anim.addListener(new AnimatorListenerAdapter() {
     @Override
     public void onAnimationStart(Animator animation) {
          Toast.makeText(MainActivity.this, "Started...", Toast.LENGTH_SHORT).show();
     };
});
anim.start();

结果如下这里写图片描述

自定义动画

在某些情境下,除了直接给一个对象指定动画外,我们还需要对每一步进行细微的控制,在这种情况下,我们可以使用ValueAnimator,建立一个监听者去进行动画的调整

// Construct the value animator and define the range
ValueAnimator valueAnim = ValueAnimator.ofFloat(0, 1);
// Animate over the course of 700 milliseconds
valueAnim.setDuration(700);
// Choose an interpolator
valueAnim.setInterpolator(new DecelerateInterpolator());
// Define how to update the view at each "step" of the animation
valueAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
  @Override
    public void onAnimationUpdate(ValueAnimator animation) {
      float animatedValue = (float) animation.getAnimatedValue();
      // Use the animated value to affect the view
  }
});
// Start the animation if not already running
if (!valueAnim.isStarted()) {
  valueAnim.start();
}

看官方文档可以去过的更多的信息,注意,在大多数情况下我们可以使用ObjectAnimator 来展示动画,但是value animator更底层,我们可以在不想直接对一个对象增加动画属性的时候去使用它。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值