您的位置:首页 > 移动开发 > Android开发

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

2016-08-28 00:25 477 查看

使用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更底层,我们可以在不想直接对一个对象增加动画属性的时候去使用它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 动画