プロパティアニメーションの基本的な使用 - Androidの属性アニメーション(A)

免責事項:この記事はブロガーオリジナル記事です、ソースを明記してください。https://blog.csdn.net/qq_38182125/article/details/89598061

I.概要

プロパティアニメーション(プロパティアニメーション)がAPI11に導入された新機能である、それが比較されるトゥイーン次のような利点があります。

  • ビュートゥイーンのみを動作させることができ、アニメーション、属性が任意のオブジェクト、およびなくてもオブジェクトを操作することができます。
  • トゥイーンは、我々はより多くの効果を必要とするとき、モーショントゥイーンの無力を翻訳、拡大縮小、回転、およびアニメーションのこれら4種類の透明性を達成することができ、およびアニメーションプロパティは、我々はできる限り、我々は、一定のルールに基づいているとして、優れた拡張性を持っています様々な属性を操作します。
  • トゥイーンは、実際の表示プロパティを変更することなく、ビューの表示を変更、およびプロパティは、直接操作のアニメーションプロパティの値であるので、このような問題は存在しません。

この記事では、次のように構造化属性を使用して簡単なアニメーションを説明します。

  • 使用ValueAnimator
  • ObjectAnimatorの使用
  • AnimatorSetの使用
  • 使用ViewPropertyAnimator
  • プロパティアニメーションにリスナーを設定します

二、ValueAnimator

ValueAnimatorアニメーションは、オブジェクトの属性値が変化するため、プロパティのアニメーションプロパティのアニメーション理由が呼び出されるクラスの最もコアな属性であるため、操作機構は、プロパティ値は、アニメーションの効果を達成するために修正され続けてアニメーションを介して行われます。

そしてValueAnimator常に値、最終値まで初期値からの遷移を修正する内部タイミングエンジンを使用して、その後、アニメーションの開始および終了値とを受信し、そのような計算を行うために使用されます。これは、作成するための次の三つの重要なメソッドがありValueAnimator、オブジェクトを:

方法 説明
ValueAnimator.ofInt(int型...値) 整数値の形で最終値への遷移の初期値
ValueAnimator.ofFloat(フロート...値) 端部への過剰な値として浮動小数点数の初期値
ValueAnimator.ofObject(TypeEvaluator評価、オブジェクト...の値) オブジェクトの形で最終値への遷移の初期値

このセクションでは、最初に紹介しますofIntofFloatofObjectその後、私たちが見る、推定部に導入されたValueAnimator一般的な方法を:

方法 説明
setDuration あなたはミリ秒でアニメーションの長さを設定すると、
setStartDelay ミリ秒の遅延時間の開始を設定します。
setRepeatCount 繰り返し回数を設定し、デフォルト値は0です。無限の再読み取りのためのINFINITEの値
setRepeatMode リピートモード設定、二つの値があります。RESTARTとREVERSE
setEvaluator セットの推定
addUpdateListener 値は、このコールバックメソッドを更新するたびにリスナーを更新する値を加算
開始 オープンアニメーション
休止 仮死
キャンセル 閉じるアニメーション

証明するために簡単な例に続いてValueAnimatorの使用は:

ValueAnimator anim = ValueAnimator.ofFloat(0.0f, 100.0f);
anim.setDuration(500);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        Log.d(TAG, "current value is " + animation.getAnimatedValue());
    }
});
anim.start();

出力:

D / MainActivity:現在の値が0.0である
D / MainActivity:現在の値は9.549156であり、
D / MainActivity:電流値は74.909256である
D / MainActivity:現在値が83.06559である
D / MainActivity:電流値は86.875656である
D / MainActivity:電流値は90.078354であり、
D / MainActivity:現在の値は93.037094である
D / MainActivity:電流値は95.5053である
D / MainActivity:現在値が97.35491である
D / MainActivity:電流値は98.795845である
D / MainActivity:電流値は99.680565である
D / MainActivity:電流値は99.996056である
D / MainActivity。現在の値は100.0です

この例では、使用ofFloat初期化するためにValueAnimator、そして次に0と100、500ミリ秒の長さの初期値および終了値を設定します。その理由は、私たちがログの方法を印刷して値の変化を見るために、あなたは視覚的な変化を見ることができない、任意のアプリケーションのビューに値を変更するためにリスナーを追加していないということです。我々は次のように整数値を採用する場合:

ValueAnimator anim = ValueAnimator.ofInt(0, 100);
anim.setDuration(500);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        Log.d(TAG, "current value is " + animation.getAnimatedValue());
    }
});
anim.start();

ただ、完全な整数値をプリントアウトすることで、私たちのログをコードの最初の行を変更します。上記についてですValueAnimator簡単な使用、そして我々が表示ObjectAnimator使用を。


三、ObjectAnimator

ObjectAnimatorであるValueAnimatorと比べて、サブクラスValueAnimatorのみトランジションの値に、ObjectAnimatorあなたが直接、任意のオブジェクトのアニメーション動作のための属性値をすることができますので、我々は通常の多くを開発し使用ObjectAnimatorそして、それは、オブジェクトを作成する方法とされValueAnimator、非常に類似した次の3つの方法が用意されています。

public static ObjectAnimator ofInt(Object target, String propertyName, int... values)
パラメータ 説明
ターゲット テキストやボタンなどのオブジェクトプロパティのアニメーション効果
プロパティ名 アニメーション化されたプロパティの効果
アニメーションの遷移値は、通常、ここでは、int型の値を初期値と終了値を設定します
public static ObjectAnimator ofFloat(Object target, String propertyName, float... values)

ofFloat及び使用する方法ofIntと同様の方法を、唯一の違いはvalues、異なる種類のofFloat方法は、フロートを使用します。

public static ObjectAnimator ofObject(Object target, String propertyName,
        TypeEvaluator evaluator, Object... values)
パラメータ 説明
ターゲット テキストやボタンなどのオブジェクトプロパティのアニメーション効果
プロパティ名 アニメーション化されたプロパティの効果
エバリュエータ カスタム推定
アニメーションの遷移値は、通常、ここで初期値と終了値を設定します

ofObject同じように、私たちは、導入された推定量は、導入を行う際に後ろにそれを残します。ここでは、ボタンの透明度を変更する、例えば、その使用を見て:

ObjectAnimator anim = ObjectAnimator.ofFloat(mButton, "alpha", 1.0f, 0.0f, 1.0f);
anim.setDuration(3000);
anim.start();

効果次のコードを実行します。
ここに画像を挿入説明

以下のようなコードをスケーリングなどの他の修飾は、であってもよいです。

ObjectAnimator anim = ObjectAnimator.ofFloat(mButton, "scaleX", 1.0f, 1.5f, 1.0f);
anim.setDuration(1000);
anim.start();

全体的に、非常にシンプルな使用する、と我々は次を参照:AnimatorSet


四、AnimatorSet

XML形式とJavaコードの形式、XML形式の使用を見て最初:アニメーションのコレクションですAnimatorSetは、それは2つの方法で使用されています。

1. XMLフォーム

アニメーションの形でXML属性は、以下の中から選択するには、いくつかのタグがあります。

タグ 対応するクラス
<設定> AnimatorSet
<アニメーター> ValueAnimator
<objectAnimator> ObjectAnimator

以下は、さまざまな属性名とそれに対応するラベルの説明です。

1.1セット・ラベル

プロパティ 説明
fillAfter 映画の終了後に固定、デフォルトはtrueであるかどうか
インターポレータ 插值器设置,默认为加减速插值器
repeatMode 重复模式设置,课选择值有restart和reverse两种
repeatCount 重复次数,默认为0
startOffset 动画开启后的延时时间
startTime 设置开始动画的时刻

1.2 animator标签

属性 描述
duration 动画的持续时长,取值为int型数值,单位为毫秒
interpolator 动画的插值器设置,默认为加速减速插值器
repeatCount 重复次数,默认为0,取值为int型整数,代表重复次数
repeatMode 重复模式,有restart和reverse两种取值,reverse表示动画正反轮流执行,restart表示一直从头开始执行
startOffset 动画开始的延迟时间,取值为int型数值,单位为毫秒
valueFrom 动画的初始值,取值可以为int型、float型或颜色值,取值类型受valueType属性影响
valueTo 动画的结束值,取值可以为int型、float型或颜色值,取值类型受valueType属性影响
valueType value的取值类型,可以取intType或者floatType,如果值类型为颜色值,那么无需定义此属性

1.3 objectAnimator标签

objectAnimator标签的设置与animator的设置十分相似,animator标签可用的属性objectAnimator标签均可以用,下面只列举出部分objectAnimator特有的属性:

属性 描述
propertyName 表示属性动画作用对象的属性的名称

接下来通过一个例子来展示XML形式的使用:

// res/animator/anim_demo.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <objectAnimator
        android:propertyName="alpha"
        android:valueType="floatType"
        android:valueFrom="1.0"
        android:valueTo="0.5"/>

    <objectAnimator
        android:propertyName="scaleX"
        android:valueType="floatType"
        android:valueFrom="1.0f"
        android:valueTo="1.5f"/>

</set>

在Java代码中,使用如下代码:

AnimatorSet animationSet =  (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.anim_demo);
animationSet.setTarget(mButton);
animationSet.start();

通过这种形式,我们就实现了在1s内同时改变按钮的透明度和x轴的伸缩的动画,效果如下所示:
ここに画像を挿入説明
以上就是关于AnimatorSet在XML形式下的使用,下面介绍Java代码形式的使用,这是一种更加推荐的用法。

2. Java代码形式

在Java代码中,我们只需要用到AnimatorSet类即可,下面我们先来介绍下这个类的常用 API:

方法 描述
setTarget 设置动画的作用对象,例如一个按钮
start 开启动画的方法
cancel 取消动画的方法
pause 暂停动画的方法
play 这个方法会返回一个Builder对象,传入的值为ValueAnimator对象或者ObjectAnimator对象,Builder类用于协助构造动画集合
with 将现有动画和传入的动画同时执行
before 将现有动画插入到传入的动画之前执行
after(Animator anim) 将现有动画插入到传入的动画之后执行
after(long delayTime) 将现有动画延迟指定毫秒后执行

接下来我们就通过一个实际的例子来展示它的使用。

ObjectAnimator alpha = ObjectAnimator.ofFloat(mButton, "alpha", 1.0f, 0.0f, 1.0f);
ObjectAnimator scaleX = ObjectAnimator.ofFloat(mButton, "scaleX", 1.0f, 1.5f, 1.0f);
ObjectAnimator rotate = ObjectAnimator.ofFloat(mButton, "rotationX", 0.0f, 360.0f);
AnimatorSet animationSet =  new AnimatorSet();
// 在进行x轴缩放之前,先同时进行透明度和旋转动画。
animationSet.play(rotate).with(alpha).before(scaleX);
animationSet.setDuration(5000);
animationSet.start();

运行代码,效果如下所示:
ここに画像を挿入説明
可以发现按钮先进行旋转和透明度动画(这两个是同时进行的),然后再进行x轴的拉伸动画。结果与我们的预期是相符的。


五、ViewPropertyAnimator

为了让我们能够更加轻松地使用属性动画,Android官方还为我们提供了一个面向对象的属性动画操作方式。它的使用方式如下所示:

View.animate().xxx().xxx();

我们这里以一个按钮动画为例展示它的使用:

mButton.animate().scaleX(2.0f).alpha(0.0f).setDuration(2000).setInterpolator(new LinearInterpolator());

效果如下所示:

ここに画像を挿入説明

需要注意的是这种设置下的动画是同时进行的,并且动画会自动启动,无需调用start方法。可以看到关于ViewPropertyAnimator的使用还是非常简单的,但我们只需要简单地对View中的一些常规属性进行动画操作时就可以考虑使用ViewPropertyAnimator。


六、属性动画的监听

属性动画提供了监听器用于监听动画的播放过程,主要有以下三个接口:AnimatorUpdateListenerAnimatorListenerAnimatorPauseListener

1. AnimatorUpdateListener

AnimatorUpdateListener接口的定义如下:

public static interface AnimatorUpdateListener {
    /**
     * <p>Notifies the occurrence of another frame of the animation.</p>
     *
     * @param animation The animation which was repeated.
     */
    void onAnimationUpdate(ValueAnimator animation);

}

可以看到这个接口中只有一个方法onAnimationUpdate,它会在动画属性值被更新的时候回调,也就是说在动画每播放一帧的时候它就会被回调一次。该监听通过addUpdateListener方法添加该监听事件。

2. AnimatorListener

AnimatorListener次のようにインターフェースが定義されます。

public static interface AnimatorListener {
    void onAnimationStart(Animator animation);
    void onAnimationEnd(Animator animation);
    void onAnimationCancel(Animator animation);
    void onAnimationRepeat(Animator animation);
}

AnimatorListenerリプレイは、私たちができるときインタフェースは、4つのメソッドを定義し、この方法は、アニメーションの開始、終了、取り消しにそれぞれ4つになり、バックと呼ばれるaddListenerイベントリスナーメソッドを追加します。

3. AnimatorPauseListener

上記の二つのインターフェースに比べてAnimatorPauseListener使用頻度が低い、このインタフェースは、次の2つのメソッドが定義されています。

public static interface AnimatorPauseListener {
    /**
     * <p>Notifies that the animation was paused.</p>
     *
     * @param animation The animaton being paused.
     * @see #pause()
     */
    void onAnimationPause(Animator animation);

    /**
     * <p>Notifies that the animation was resumed, after being
     * previously paused.</p>
     *
     * @param animation The animation being resumed.
     * @see #resume()
     */
    void onAnimationResume(Animator animation);
}

これらの2つの方法は、あなたがすることができ、動画が一時停止されたときにコールバックしており、回復に一時停止addPauseListenerイベントリスナーメソッドを追加します。


参照

「芸術的探求のAndroidの開発。」

  • 第7章Androidのアニメーションでの詳細な分析
    • 7.3プロパティのアニメーション

Androidの属性アニメーションが完全に(上)解決し、知人プロパティアニメーションの基本的な使い方


私は〜あなたを助けるために、この記事を願っています

おすすめ

転載: blog.csdn.net/qq_38182125/article/details/89598061