目次
Android アニメーションの分類
属性アニメーションとトゥイーン アニメーションの比較
ValueAnimator
ValueAnimator の使用法
システム TypeEvaluator
ホームページ ウェブフロントエンド htmlチュートリアル Android プロパティAnimationPropertyアニメーション シリーズ 1 つのValueAnimator_html/css_WEB-ITnose

Android プロパティAnimationPropertyアニメーション シリーズ 1 つのValueAnimator_html/css_WEB-ITnose

Jun 24, 2016 am 11:43 AM

Android アニメーションの分類

市場の多くのアプリはアニメーション効果を使用しており、アニメーション効果をうまく使用するとユーザー エクスペリエンスを向上させることができます。では、Android システムにはどのようなアニメーション メカニズムがあるのでしょうか?
1. フレームごとのアニメーション。実際、フレームごとのアニメーションの動作原理は非常に単純で、漫画の動作原理と同様に、完全なアニメーションを別々の画像に分割し、それらを結合して再生します。
2. トゥイーン アニメーションを使用すると、ビュー上でフェードインとフェードアウト、スケーリング、移動、回転などの一連のアニメーション操作を実行できます。
3. プロパティ アニメーション プロパティ アニメーションは、オブジェクトのプロパティを変更することで、より魅力的なアニメーション効果を実現できます。

属性アニメーションとトゥイーン アニメーションの比較

1. トゥイーン アニメーションはビューの位置とリアルな効果を変更するだけで、その属性を変更することはできません。たとえば、トゥイーン アニメーションを使用してボタンを移動し、再度クリックした場合、ボタンはクリック イベントに応答しませんが、属性アニメーションを使用するとこれを行うことができます。
2. トゥイーン アニメーションのオブジェクトは View に限定されますが、属性アニメーションのオブジェクトは View に限定されず、すべてのオブジェクトに影響します。たとえば、属性アニメーションは色の値を変更できますが、トゥイーン アニメーションではこれを変更できません。

ValueAnimator

ValueAnimator は、属性アニメーションの重要なクラスです。値の間のアニメーションの遷移を計算するために内部でタイム ループ メカニズムを使用します。初期値と終了値を ValueAnimator に提供し、アニメーションの長さを伝えるだけです。を実行する必要があり、ValueAnimator が自動的に初期値から終了値にスムーズに移行するのに役立ちます。例を通してその使用法を見てみましょう。 ValueAnimator の使用法は非常に簡単です。

private void startAnimation() {        ValueAnimator animator = ValueAnimator.ofInt(0, 20,0);        //为了看到动画值的变化,这里添加了动画更新监听事件来打印动画的当前值        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                int value = (int) animation.getAnimatedValue();                Log.e("TAG", "the value is " + value);            }        });        animator.setDuration(1000);//动画时间        animator.start();//启动动画    }
ログイン後にコピー

ValueAnimator ofInt (int...values); 1 つ以上のパラメータを指定できます。ただし、通常は 2 つ以上のパラメータがあり、それが 2 つのパラメータで表される場合、値は時間の経過とともに最初のパラメータから 2 番目のパラメータに変化します。パラメータが 3 つ以上ある場合: これらの値の間は時間の経過とともに変化します。上記の印刷結果を次のように見てください:

ValueAnimator には他のメソッドもあります。たとえば、浮動小数点データのアニメーション変更が必要な場合は、次のメソッドを使用できます:

ValueAnimator animator = ValueAnimator.ofFloat(0f,10.5f,5.0f,0f);        animator.setDuration(500);//动画时间        animator.start();//启动动画
ログイン後にコピー

カラー値を変更するアニメーション

ValueAnimator animator = ValueAnimator.ofArgb(0x00ffff,0x00ffee);        animator.setDuration(500);//动画时间        animator.start();//启动动画
ログイン後にコピー

Animation to一般的な値を ValueAnimator animator = ValueAnimator.ofObject() に変更します。それについては以下でお話します。

ValueAnimator の使用法

上記の例で ValueAnimator が使用されている場所を見ていなかったことに驚いたかもしれません?心配しないでください。その有用性を証明するために例をあげましょう。携帯電話の画面上に直線を動的に描きます。

ValueAnimator animator = ValueAnimator.ofObject (TypeEvaluator エバリュエーター、Object… 値) を使用しました。このメソッドの最初のパラメーターはアニメーション遷移アルゴリズム クラスで、後続のパラメーターはアニメーション遷移値です。
ここでは主に TypeEvaluator 型について説明します。 ofObject() メソッドは ofInt() および ofFloat() とは異なります。TypeEvaluator は自分で実装する必要がありますが、他の 2 つのメソッド システム (IntEvaluator および FloatEvaluator 型) はメソッドの実装に役立ちます。 。
次のように FloatEvaluator の実装を見てください:

package com.xjp.animations;import android.animation.TypeEvaluator;import android.animation.ValueAnimator;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;public class MainActivity extends ActionBarActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ViewGroup parent = (ViewGroup) findViewById(R.id.parent);        parent.addView(new SingleLine(this));    }    private class SingleLine extends View {        private Paint mPaint;        private float x = 0;        private float y = 150;        public SingleLine(Context context) {            super(context);            mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);            mPaint.setColor(Color.RED);        }        public SingleLine(Context context, AttributeSet attrs) {            super(context, attrs);            mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);            mPaint.setColor(Color.RED);        }        public SingleLine(Context context, AttributeSet attrs, int defStyleAttr) {            super(context, attrs, defStyleAttr);        }        @Override        protected void onDraw(Canvas canvas) {            if (0 == x) {                startAnimation();            }            canvas.drawLine(0, y, x, x + y, mPaint);        }        private void startAnimation() {            ValueAnimator animator = ValueAnimator.ofObject(new SingleLineEvaluator(), 0, 500);            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {                @Override                public void onAnimationUpdate(ValueAnimator animation) {                    float i = (float) animation.getAnimatedValue();                    x = i;                    //不断的刷新UI                    invalidate();                }            });            animator.setDuration(2000);            animator.start();        }    }    private class SingleLineEvaluator implements TypeEvaluator {        @Override        public Object evaluate(float fraction, Object startValue, Object endValue) {            return fraction * (((Number) endValue).floatValue() - ((Number) startValue).floatValue());        }    }}
ログイン後にコピー

FloatEvaluator が TypeEvaluator インターフェイスを実装し、evaluate() メソッドをオーバーライドしていることがわかります。 3 つのパラメータがevaluate()メソッドに渡されます。最初のパラメータであるfractionは、アニメーションの完了を示すために使用されます(fractionの値は0と1の間で変化します)。 2 番目と 3 番目のパラメータはそれぞれアニメーションの初期値と終了値を表します。上記のコードのロジックは比較的明確で、終了値から初期値を減算し、それらの差を計算し、それに分数の係数と初期値を乗算すると、現在のアニメーションの値が得られます。 。

それでは、実装した TypeEvaluator を見てみましょう

public class FloatEvaluator implements TypeEvaluator {    public Object evaluate(float fraction, Object startValue, Object endValue) {        float startFloat = ((Number) startValue).floatValue();        return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);    }}
ログイン後にコピー

インターフェイス メソッドの Evaluate は、線形直線アルゴリズムを実装します。 y=n*x;

システム TypeEvaluator

システムの組み込み TypeEvaluator には次の型が含まれており、コード内で直接使用できます。

ArgbEvaluator: このエバリュエーターは、ARGB カラーを表す整数値のタイプ間で補間を実行するために使用できます。
FloatEvaluator: このエバリュエーターは、浮動小数点値間の補間を実行するために使用できます。
IntEvaluator: このエバリュエーターは、int 型の値の間の補間を実行するために使用できます。
RectEvaluator: このエバリュエーターは、型間の長方形値の補間を実行するために使用できます。

次のセクション: ObjectAnimator の学習

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

< datalist>の目的は何ですか 要素? < datalist>の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML< Datalist>について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

< Progress>の目的は何ですか 要素? < Progress>の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML< Progress>について説明します。要素、その目的、スタイリング、および< meter>との違い要素。主な焦点は、< Progress>を使用することです。タスクの完了と< Meter> statiの場合

< meter>の目的は何ですか 要素? < meter>の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html< meter>について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化< Meter> < Progress>およびex

ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? Mar 20, 2025 pm 05:56 PM

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

< iframe>の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? < iframe>の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? Mar 20, 2025 pm 06:05 PM

この記事では、< iframe>外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? Mar 17, 2025 pm 12:27 PM

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

HTML5< time>を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? HTML5< time>を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? Mar 12, 2025 pm 04:05 PM

この記事では、html5< time>について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします

HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? Mar 17, 2025 pm 12:20 PM

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

See all articles