上級Android - プロパティアニメーションの詳細解説(1)_html/css_WEB-ITnose
はじめに
前回の記事「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
は、2 つの内部リスニング インターフェイスをカプセル化します: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,还可以应用于任何对象。 このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
![]() ホットAIツール![]() Undresser.AI Undressリアルなヌード写真を作成する AI 搭載アプリ ![]() AI Clothes Remover写真から衣服を削除するオンライン AI ツール。 ![]() Undress AI Tool脱衣画像を無料で ![]() Clothoff.ioAI衣類リムーバー ![]() AI Hentai GeneratorAIヘンタイを無料で生成します。 ![]() 人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最高のグラフィック設定
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
アサシンのクリードシャドウズ:シーシェルリドルソリューション
1週間前
By DDD
R.E.P.O.誰も聞こえない場合はオーディオを修正する方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
Atomfallのクレーンコントロールキーカードを見つける場所
1週間前
By DDD
![]() ホットツール![]() メモ帳++7.3.1使いやすく無料のコードエディター ![]() SublimeText3 中国語版中国語版、とても使いやすい ![]() ゼンドスタジオ 13.0.1強力な PHP 統合開発環境 ![]() ドリームウィーバー CS6ビジュアル Web 開発ツール ![]() SublimeText3 Mac版神レベルのコード編集ソフト(SublimeText3) ![]() ホットトピック![]() この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合 ![]() この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。 ![]() この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex ![]() この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。 ![]() この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。 ![]() この記事では、html5&lt; time&gt;について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします ![]() 記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。 ![]() この記事では、&lt; iframe&gt;外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。 ![]() |