はじめに
前回の記事「Android 入門 - トゥイーン アニメーションとフレーム アニメーション アプリケーションの概要」では、トゥイーン アニメーション、フレーム アニメーション、およびいくつかの関連アプリケーションについてまとめています。基本的には、簡単なスケーリング、回転、透明度の変更、および移動のアニメーション効果を習得できます。 , ただし、ビュー切り替えアニメーション、レイアウト切り替えアニメーション、3D 回転アニメーションなど、より複雑なアニメーション効果を実現する必要がある場合、ビュー アニメーションではこれらを実行できません。このとき、プロパティ アニメーションが登場しました。この記事では、プロパティ アニメーションに関する知識を中心にまとめます。
1. プロパティ アニメーションの概要
プロパティ アニメーション、私が Android 1.5 に初めて触れたとき、そのようなアニメーション システムは存在せず、Android 3.0 まで導入されませんでした (3.0 より前のシステムでは、プロパティ アニメーションは NineOldAndroids を通じて使用できます)プロジェクト) 。公式ドキュメントでは次のように紹介されています: プロパティ アニメーション システムは、ほぼすべてのオブジェクトをアニメーション化できる強力なフレームワークで、オブジェクトが画面に描画されているかどうかに関係なく、時間の経過とともにオブジェクトのプロパティを変更するアニメーションを定義できます。指定された時間の長さの値で変化するのは、オブジェクト (フィールド内のオブジェクト) の実際のプロパティ値です 。つまり、プロパティアニメーションはです。アニメーション実行クラス(Animatorシステム)は、アニメーション操作オブジェクトのプロパティ、期間、開始および終了プロパティ値、時間差などを設定し、システムは設定に従ってパラメータを設定します。 . オブジェクトのプロパティを動的に変更するアニメーション効果。 。 2. プロパティアニメーションのアニメーション処理 次に、公式ドキュメントから例を引用します(追伸:Googleの公式ドキュメントは非常にわかりやすく説明されており、最高の学習教科書と言えます。もちろん、あなたは辛抱強く待つ必要があります)英語を読んでください)。 最初の例は、持続時間が 40 ミリ秒で均一に変化するアニメーションで、フレームが 10 ミリ秒ごとに更新されます (目的は水平方向に 10 ピクセル移動することです)。x がこの実際の属性とみなされることに注意してください。オブジェクト、この x もアニメーションの進行に応じて変化し続けます。
2 つ目は、非線形変化アニメーションです (
属性値を変更する、つまり、異なる補間を設定することで
、下の図では、移動速度が最初は徐々に増加し、その後徐々に減少します)、こちらも 40ms で時間が 40 ピクセル移動し、アニメーションの進行に合わせて x 属性が常に変化します。
1. 属性アニメーション リスナー
Animator.AnimatorListener『onAnimationCancel(Animator アニメーション)、onAnimationEnd(Animator アニメーション)、onAnimationRepeat(Animator アニメーション)、』 、onAnimationStart(アニメーター アニメーション)』と Animator.AnimatorPauseListener
『onAnimationPause(アニメーター アニメーション)、onAnimationResume(アニメーター アニメーション)』。
Animator listen関連メソッドの使い方説明
リスナーの追加(開始、繰り返し、終了などアニメーションの存続期間中) | void | ||||||||||||||||||||||||||||
一時停止中に聞く | void | ||||||||||||||||||||||||||||
すべてのリスナーをキャンセル | void | ||||||||||||||||||||||||||||
リスニングを指定しない | void | ||||||||||||||||||||||||||||
一時停止指定を解除 | 3. プロパティ アニメーション の計算原理 まず、公式のプロパティ アニメーション
public void runAnimSets(View view) { ObjectAnimator animScaleX = ObjectAnimator.ofFloat(mImage, "scaleX", 2.0f, 0.5f); ObjectAnimator animScaleY = ObjectAnimator.ofFloat(mImage, "scaleY", 2.0f, 0.5f); ObjectAnimator animAlpha=ObjectAnimator.ofFloat(mImage,"alpha",1.0f,0.0f); AnimatorSet animSet = new AnimatorSet(); animSet.setDuration(4000); animSet.setInterpolator(new LinearInterpolator()); //三个动画同时执行 animSet.playTogether(animScaleX, animScaleY,animAlpha); animSet.start(); } ログイン後にコピー 动画开始时先扩大两倍然后再缩小同时透明度减小为0 1、首先在res下建立animator文件夹,然后建立对应的xml文件,根节点为set嵌套objectAnimator(其中orderring属性值:同时执行together,依次执行sequentially)或者直接为objectAnimator。<?xml version="1.0" encoding="utf-8"?><objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:propertyName="scaleX" android:valueFrom="1.0" android:valueTo="0.5" android:valueType="floatType" ></objectAnimator> ログイン後にコピー <?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together" > <objectAnimator android:duration="3000" android:propertyName="scaleX" android:valueFrom="1" android:valueTo="0.5" > </objectAnimator> <objectAnimator android:duration="0000" android:propertyName="scaleY" android:valueFrom="1" android:valueTo="0.5" > </objectAnimator> <objectAnimator android:duration="3000" android:propertyName="alpha" android:valueFrom="1.0" android:valueTo="0"> </objectAnimator></set> ログイン後にコピー 2、然后使用AnimatorInflater加载动画的资源文件// 加载动画 Animator anim = AnimatorInflater.loadAnimator(this, R.animator.animator_scalealpha); ログイン後にコピー 3、给目标View设置旋转、缩放、反转等的中心点或者轴,(默认中心缩放,和中间对称线为反转线),然后手动触发View重绘mImage.setPivotX(0);mImage.setPivotY(0);//触发重绘mImage.invalidate();//mImage.postInvalidate(); ログイン後にコピー 4、给Animator设置target并start动画,Over。anim.setTarget(mImage);anim.start(); ログイン後にコピー 完整的方法 public void runXmlAnimSet(View v){ Animator anim = AnimatorInflater.loadAnimator(this, R.animator.animator_scalealpha); mImage.setPivotX(0); mImage.setPivotY(0); //显示的调用invalidate mImage.invalidate(); mImage.postInvalidate(); anim.setTarget(mImage); anim.start(); } ログイン後にコピー Property Animation它更改的是对象的实际属性,本质就是系统根据特定的算法不断地动态改变对象的实际属性从而形成一种动画效果,而在View Animation(Tween Animation)中,其改变的是View的绘制效果,真正的View的属性保持不变,比如说无论你在对话中如何缩放Button的大小,Button的有效点击区域还是没有应用动画时的区域,其位置与大小都不变。而在Property Animation中,改变的是对象的实际属性,如Button的缩放,Button的位置与大小属性值都改变了。而且Property Animation不止可以应用于View,还可以应用于任何对象。 ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
function_exists() はカスタム関数を決定できません
Function test () {return true;} if (function_exists ('test')) {echo "テストは関数です";
から 2024-04-29 11:01:01
0
2
1986
Google Chromeのモバイル版を表示する方法
こんにちは、先生、Google Chrome をモバイル版に変更するにはどうすればよいですか?
から 2024-04-23 00:22:19
0
10
2146
親ウィンドウには出力がありません
document.onclick = function(){ window.opener.document.write('私は子ウィンドウの出力です');
から 2024-04-18 23:52:34
0
1
1706
関連トピック
詳細>
|