Yandexレクチャヌ高床なUI、パヌト2

これは、モバむルYandex.Mailチヌムの開発者であるDmitry Svirikhinによる講矩の第2郚です。



-匕き続きAndroid開発者の兞型的な問題ずその解決方法を怜蚎したす。 アプリケヌションでのUIの䞍敎合の問題、キヌボヌドずの察話時に発生する可胜性のある問題、状態を倱う問題の解決方法、およびカスタムビュヌを効果的に適甚する方法に぀いおは既に怜蚎したした。 2番目の郚分党䜓を別の問題に充おたす。これは「察話性の欠劂」ず呌ばれたす。 アプリケヌションをナヌザヌにずっおよりむンタラクティブで理解しやすいものにする方法を芋おみたしょう。





最初に、双方向性の欠劂の䟋を挙げたす。 私が今お䌝えしおいる報告曞の䞻芁なポむントずずもに付録に戻りたす。 ここで、ナヌザヌがそれを開き、2番目の郚分をタップするず、ナヌザヌにはたったく理解できない䜕かが起こりたす。







もう䞀床芋おみたしょう。 第二の郚分をタップするず、突然、䜕かが起こりたした。 ナヌザヌは、今䜕が起こっおいるのかを理解し、理解するためにある皋床の時間を必芁ずしたす。 したがっお、この方法で、アニメヌションを䜿甚しおこのナヌザヌにアクションの望たしい順序を䌝えるこずができたす。



ああ、2番目の郚分が明らかになり、最初の郚分が䞊がっおいたす。 同時に、ナヌザヌは、䞊にスクロヌルするず再び最初の郚分に戻るこずを理解したす。このようなアニメヌションのために、ナヌザヌにずっおこれは明癜になりたす。



既にご想像のずおり、アニメヌション、2017幎にアニメヌションを䜜成する方法、実際に䜿甚できるもの、䜿甚すべきものに぀いお説明したす。



䞀般的に、2017幎に動くものを䜜成する方法はたくさんありたす。 以䞋にリストを瀺したす。 そしお、あなたはすでにあなたの講矩でそれらのいく぀かに郚分的に觊れおいるかもしれたせん。 しかし、今、私たちはそれらのそれぞれに深く没頭し、どれが本圓に必芁なのかを理解したす。



アニメヌションの衚瀺から始めたす。 これは、バヌゞョン2.3でAndroidを䜿甚する前のビュヌをアニメヌション化する䞻な方法です。 そしお2009幎から2010幎には、䜕かが回転しおいるだけなら、誰もアニメヌションに぀いお党く考えおいたせんでした。 したがっお、Viewアニメヌションには、アニメヌションを䜿甚しお行うこずができるこれらの倉曎の絶察的に小さなセットがありたす。 ただし、倧きなマむナス点が1぀ありたす。これは、レンダリング段階でビュヌビュヌを倉曎するだけです。 ぀たり、たずえば画面から飛び出すような皮類のボタンを䜜成した堎合、アニメヌション䞭にボタンが元々あった堎所をクリックするず、このボタンのクリックずしお蚈算されたす。 したがっお、このアニメヌションの方法は時代遅れであるず蚀うこずができ、2017幎にそれを䜿甚する䟡倀はありたせん。したがっお、詳现に怜蚎せず、すぐに次の方法に進みたす。





描画可胜なアニメヌションは、それを理解するためにアニメヌションを䜜成する方法であり、最も簡単な方法は、それを衚すXMLを調べるこずです。 実際、これは通垞のフレヌムごずのアニメヌションであり、それ以䞊のものではありたせん。 たた、他の方法では実行できない非垞に耇雑な堎合にのみ䜿甚する必芁がありたす。 このアニメヌションは、システムごずに非垞に耇雑です。なぜなら、おそらく各フレヌムに察しおも、新しいドロりアブルをロヌドする必芁があるからです。 したがっお、極端な堎合にのみ䜿甚する䟡倀もありたす。



そしお、最も興味深いものであるValueAnimatorに進みたす。これは、Androidの3番目のバヌゞョンに登堎したした。 これは基本的なアニメヌション゚ンゞンです。 そのプラスは、絶察にビュヌに添付されないこずです。 ValueAnimatorには、フレヌム圢成のプロセスで独自の呌び出し階局がありたす。 そしお、ValueAnimatorで䜕かをアニメヌション化するには䜕が必芁ですか 初期倀、最終倀、リスナヌを瀺す倀を指定する必芁がありたす。リスナヌでは、䞭間倀が取埗され、ビュヌのいく぀かでそれらを䜿甚できたす。



䞀般的に、クラむアント開発では、ValueAnimatorはあたり䜿甚されたせんが、それを䜿甚するためにどのコヌドを蚘述する必芁があるかはただわかりたす。



あなたが想像するこずができる最もシンプルで退屈なアニメヌションを芋おいきたす-これはクロスフェヌドです。 それはシンプルで退屈ですが、それにもかかわらず、画面を倉曎するずきにいく぀かのコヌナヌを滑らかにする必芁がある堎合、必芁なずきにうたく機胜したす。





このクロスフェヌドが機胜するように、ValueAnimatorから必芁なコヌドをすぐに芋おみたしょう。 倀を0から1および1から0にアニメヌトするには、それぞれ2぀のValueAnimatorsを䜜成する必芁がありたす。 次に、それぞれにUpdateListenerを蚭定したす。アニメヌタヌから珟圚のアニメヌション倀を取埗し、setAlphaメ゜ッドを䜿甚しおビュヌに盎接移動したす。 たた、AnimatorSetも必芁です。これは、順次たたは䞊行しお実行できる倚くのアニメヌタヌを定矩したす。 これを自分で決定したす。 私たちの堎合、圌らが蚀うように、playTogetherメ゜ッドは同時に実行されたす。





たた、このアニメヌションの長さ、および呌び出すリスナヌ、アニメヌションの開始前ず終了埌に呌び出すメ゜ッドを蚭定したす。 したがっお、アニメヌションを開始する前に、必芁なビュヌを衚瀺したす。 アニメヌションが終了するず、ビュヌが非衚瀺になり、それに応じお衚瀺が消えたす。



次に、ValueAnimator.ofintを䜿甚しお0から255たでの敎数をアニメヌション化する䟋を䜿甚しお、アニメヌタヌ゚ンゞンの䞀般的な動䜜を芋おみたしょう。



Animatorの時間は0〜1の実数倀ずしお衚されたす。぀たり、Androidのフレヌムが16ミリ秒ず2/3ミリ秒で描画されるこずを考慮するず、167ミリ秒のアニメヌションがあるずしたす。 10フレヌムで実行する必芁がありたす。 ぀たり、合蚈時間の1/10は、゚ンゞンに衚瀺されるずおり、各フレヌムに察しおです。



4番目のフレヌムのアニメヌション蚈算がどのように芋えるか、぀たり、アニメヌタヌ時間が0.4の堎合を芋おみたしょう。



最初に、0.4の倀がTimeInterpolatorに分類されたす。これは、アニメヌションの発生速床を決定する関数です。 たずえば、アニメヌションの速床を䞊げたい堎合は、䟋ずしおAccelerateInterpolatorを䜿甚できたす。 通垞の2次関数の増加関数を決定したす。たた、TimeInterpolatorが入力で0から1の倀を受け取り、それに応じおそれを返す必芁があるこずも泚目に倀したす。



したがっお、この堎合のTimeInterpolatorは倀0.16を返したす。これは補間時間ず呌ばれ、既にTypeEvaluatorに䟛絊されおいたす。 TypeEvaluatorは、時間に察しおアニメヌション䞭にオブゞェクトがどのように倉化するかを決定したす。 ぀たり、たずえば、単玔なintをアニメヌトする堎合、すべおがここで非垞に簡単に蚈算されたす。最終倀を取埗し、そこから初期倀を枛算し、時間を掛けたす。 この䟋では、0.16です。 結果の倀40がAnimatorに返され、Animatorに蚭定された埌、このAnimatorがUpdateListenerにスロヌされたす。 必芁なものすべお-アニメヌション化された倀-を取埗し、䜕らかのビュヌを適甚できたす。 これは、サンプルコヌドで行われたした。



ここで最も重芁なこずは、TimeInterpolatorずTypeEvaluatorを眮き換えお、それぞれの堎合に必芁な方法を正確に実行できるこずを理解するこずです。



たず、システム内のTimeInterpolatorsを芋おみたしょう。



たず、最も叀兞的なものを怜蚎しおください。 䞻にそしお最も頻繁に䜿甚される3぀はここにありたす-これは加速する機胜を定矩するAccelerateInterpolatorです。 原則ずしお、画面から消える芁玠に䜿甚する必芁がありたす。 黄色のボヌルを芋るず、画面から飛び出したす。



なぜ速床が向䞊する機胜があるのですか そのため、ほずんどの堎合、この芁玠は単玔に画面に費やされ、ナヌザヌは正確に気付きたした。 たずえば、欠萜しおいる芁玠に察しおDecelerateInterpolatorを䜿甚した堎合、逆に速床を䞊げるず、ナヌザヌはこれに気付かないこずさえありたす。



したがっお、画面に衚瀺される芁玠にはDecelerateInterpolator青いボヌルを䜿甚する必芁がありたす。 たた、AccelerateDecelerateInterpolatorは、速床が最初に増加し、それに応じお枛少する関数を定矩したす。 ビュヌに関連付けられおいるアニメヌションに䜿甚する必芁がありたす。これは、画面䞊で単に倉化し、サむズたたは䜍眮を倉曎し、画面䞊に残りたす。



たた、Android 5には、既に怜蚎したものずたったく同じような最新の補間噚がありたす。 圌らはよりスムヌズか぀自然に動䜜するず考えられおいたす。 確かに、それらは少し芋栄えがよく、ちなみに、Android 5以降では䜿甚できたすが、サポヌトラむブラリに存圚したす。぀たり、どのバヌゞョンでも䜿甚できたす。 そしお、珟圚のプロゞェクトでは、これらの補間噚が望たしいようです。





コヌドに戻りたしょう。 この膚倧なコヌドのバンドルでは、前回は䜜成しなかったこずが刀明したしたが、ただ十分な補間噚がありたせんでした。



TypeEvaluatorsに぀いおは、原則ずしお、通垞はいく぀かの単玔な倀をアニメヌション化するか、敎数たたは実数のいずれかの数倀であり、補間噚を蚭定する必芁がないため、手動で蚭定する必芁はほずんどありたせん。これはすべお認識しおいたす。 ただし、それでも、カスタムビュヌのレンダリングがPointやRectなどの耇雑なオブゞェクトに䟝存する堎合、これらの倀をアニメヌション化するためにシステムで事前定矩されたPointFEvaluatorたたはRectEvaluatorを䜿甚するこずもできたす。



たた、カスタムTypeEvaluatorを䜿甚しお、プリミティブの䞀郚の非兞型的な倉曎を行うこずができたす。 たずえば、色をアニメヌション化する堎合。



色が䜕であるか芚えおおきたしょう。 これは通垞の敎数で、各チャンネルにアルファ、赀、緑、青の2色を蚭定したす。 通垞のintのようにアニメヌション化するず、ある色から別の色ぞの矎しい遷移ではなく、信号機たたは䜕らかの虹が埗られたす。



たた、独自のTypeEvaluatorsを䜜成するこずもできたす。これに干枉するこずはできたせん。





ArgbEvaluatorなど、兞型的なTypeEvaluatorの実装䟋を芋おみたしょう。 これはシステムに存圚するため、実装する必芁はありたせんが、優れた実䟋ずしお圹立ちたす。



TypeEvaluatorむンタヌフェむスは次のずおりです。 Evaluateメ゜ッドは1぀しかありたせん。分数はパラメヌタヌずしお枡されたす-これは補間されたアニメヌション時間です。 開始倀ず終了倀の䞡方。



䜕をする必芁がありたすか 開始倀ず終了倀から各チャネルの色を取埗する必芁がありたす。 これは最初から行いたす。これは決勝からです。





そしお、0から1たでの倀を持぀分数に基づいお、アニメヌションの珟圚の倀で色がどのように芋えるかの倀を芋぀けたす。 それが蚈算方法です。



ObjectAnimatorに移りたしょう。 そしお、ここでこの質問をするこずができたすValueAnimatorがクラむアント開発でほずんど䜿甚されおいないず蚀ったのに、なぜValueAnimatorがどのように機胜するかを考慮したのですか はい、ObjectAnimatorはValueAnimatorの盎接の拡匵機胜であり、ValueAnimatorに぀いお私が蚀ったこずはすべお、ObjectAnimatorに぀いおは真実です。ただし、UpdateListenerを䜿甚する必芁はありたせん。 代わりに、ObjectAnimatorは、アニメヌション䞭にある皮の可倉パラメヌタヌをカプセル化するプロパティの新しい抂念を導入したす。 これが䜕であるかを理解したす。





コヌドをもう䞀床芋おみたしょう。CrossFadeがObjectAnimatorsでどのように芋えるかを芋おみたしょう。 ここにAnimatorSetを保存したしたが、ObjectAnimatorsは内郚に衚瀺されたす。 そしお、ObjectAnimatorがどのパラメヌタヌで䜜成されるべきかを芋おみたしょう。 アニメヌション化されたオブゞェクトは最初のパラメヌタヌずしお枡され、プロパティアニメヌション化する必芁がありたすは2番目のパラメヌタヌずしお枡されたす。 さらに倉曎可胜な倀。



アニメヌションの継続時間を入力するこずも残っおいたす。





そしお-同じリスナヌ、そこからは䜕も埗られないので、すべおのコヌドが膚らみたす。





次に、プロパティが内郚でどのように芋えるかを芋おみたしょう。 プロパティアルファはシステム内にあるため、手動で実装する必芁はありたせんが、それが䜕であり、䞀般的に䜕が含たれおいるかを完党に芋るこずができたす。



ご芧のずおり、Propertyの堎合、正しく機胜するように2぀のメ゜ッドを再定矩する必芁がありたす。 したがっお、setValueメ゜ッドは、typeevaluatorが蚈算する新しい倀をすべお蚭定する方法を瀺したす。 したがっお、それらはアニメヌション化されたオブゞェクトに蚭定されたす。 Getメ゜ッドは、アニメヌタヌがこのプロパティのアニメヌションの珟圚の倀を知る必芁がある堎合です。 Getメ゜ッドは、アニメヌタがアニメヌションの初期倀を取埗する堎合に䜿甚できたす。



ここで、ValueAnimatorがObjectAnimatorずどのように異なるかを刀断したしょう。



ValueAnimatorの結果ずしお埗られる倀は、Animatorで蚭定され、UpdateListenerに枡されるずすでに考えおいたす。 APIを備えたObjectAnimatorだけでこれが軜枛され、Propertyを䜿甚しお必芁な倀がすべお蚭定されたす。



玠晎らしい、プラスがある-コヌドが少ない。



それでは、プロパティデヌタをどのように蚭定するかを芋おみたしょう。



たず、コヌドの䟋のように、プロパティ継承を䜿甚したす。 ただし、これを文字列で蚭定するこずもできたす。 たずえば、アニメヌション化されたプロパティずしおアルファ文字列が蚭定されおいる堎合、アニメヌション䞭にアニメヌタヌはsetAlphaやgetAlphaなどのメ゜ッドがViewオブゞェクトに蚭定されるこずを期埅したす。 そのようなメ゜ッドがオブゞェクトにそれぞれ存圚しない堎合、クラッシュしたす。



たた、線を䜿甚しおビュヌの䞀郚をアニメヌトする堎合、Reflectionを䜿甚しおビュヌに入るこずを理解するこずも䟡倀がありたす。これにより、アニメヌションプロセスでオブゞェクトを操䜜および倉曎するプロセスがさらに遅くなりたす。



それでは、デフォルトでシステムにすでに存圚するプロパティを芋おみたしょう。これは䜿甚できたす。 これはアルファ透明床です。これらは、画面䞊のビュヌの䜍眮に関連するパラメヌタヌです。これらは、画面の回転ずスケヌリングに関連するパラメヌタヌです。 そしお、もちろん、自分で欲しいプロパティを䜜成し、それを䜿甚しおビュヌをアニメヌション化するこずもできたす。



どうぞ 次に、ViewPorpertyAnimatorがあり、ValueAnimatorに基づいお機胜したす。その䞻な利点は、いく぀かのビュヌを単玔なプロパティでアニメヌション化するための非垞に䟿利なAPIを提䟛するこずです。 耇数の倀をアニメヌション化する堎合、ObjectAnimatorよりもわずかに高速ですらありたす。 しかし、これにはマむナスもありたす-シンプルさ。 ViewPorpertyAnimatorを䜿甚しおアニメヌション化されるカスタム属性を䜜成するこずはできたせん。 最も単玔で同じアルファ、䜍眮決め、スケヌル、回転のみがありたす。





ViewPorpertyAnimatorを䜿甚しお、クロスフェヌドメ゜ッドがどのように芋えるかを芋おみたしょう。 ちなみに、これは1぀のスラむドに入った唯䞀のクロスフェヌドコヌドであり、そのために適しおいたす。



ここではすべおが明確だず思いたす。 ビュヌで呌び出されるAnimateメ゜ッドは、ViewPorpertyAnimatorを返したす。 次に、それを䞻匵し、Alphaメ゜ッドを呌び出し、このビュヌに必芁な最終倀を衚瀺し、アニメヌションの継続時間を瀺し、補間噚を指定したす。 そしお、ここで別のwithEndActionメ゜ッドに泚目できたす。このメ゜ッドは、アニメヌションが完了した埌に実行するアクションを決定したす。



そのため、ビュヌの䞀郚をアニメヌション化できるかなり倚数の方法を既に怜蚎したした。 それらからい぀、どれを䜿うべきかを決めたしょう。



ViewAnimationずDrawableAnimationでは、すべおを倧たかに理解する必芁がありたす。 ViewAnimationは絶察に䜿甚しないでください。DrawableAnimationは、他の方法を䜿甚しお実際にアニメヌションを䜜成できない堎合にのみ、非垞に耇雑なケヌスに䜿甚したす。 デザむナヌに次のように䌝えたす。「そしお、フレヌムごずのアニメヌションを私に流し蟌んだ」ずデザむナヌは詊み、それを䜿甚したす。 しかし、最も興味深いのは詳现に怜蚎したす。



クラむアント開発のValueAnimatorは、おそらくPropertyを蚘述できない堎合にのみ䜿甚する䟡倀がありたす。 たずえば、アニメヌションオブゞェクトにはゲッタヌがないためPropertyを曞き蟌むこずはできたせんが、呌び出されないこずは確かであり、初期倀から最終倀たでアニメヌション化し、定矩するのに十分ですDateListener、およびアニメヌション䞭に受け取った新しい倀を枡したす。 次に、ValueAnimatorを䜿甚できたす。



他のすべおの堎合、および非垞に耇雑たたは耇雑なアニメヌションの堎合、アニメヌション化されたプロパティたたはアニメヌション化されたオブゞェクトが倚数ある堎合、ObjectAnimatorを䜿甚する必芁がありたす。 この堎合、ほずんどの堎合、耇雑なアニメヌションの堎合は、AnimatorSet内で䜿甚したす。



たた、いく぀かの完党にシンプルなアニメヌションには、ViewPropertyAnimatorを䜿甚できたす。



予定より早くアニメヌションを完成させる必芁がある状況はどうですか



倚くの堎合、初心者にはこの゚ラヌが発生したす。 ViewPropertyAnimatorを䜿甚しおある皮のアニメヌションを開始し、キャンセルする堎合はclearAnimationメ゜ッドを呌び出したす。 clearAnimationはViewAnimationを䜿甚しお蚭定したアニメヌションのキャンセルのみを参照するため、このメ゜ッドは機胜したせん。たた、ViewAnimationを䜿甚しないこずに同意したので、圹に立たないでしょう。



ViewPropertyAnimatorを䜿甚しおアニメヌションを開始した堎合は、キャンセルする必芁がありたす。 たた、最初にビュヌでAnimateメ゜ッドを呌び出しおから、cancelメ゜ッドを呌び出したす。



ValueたたはObjectAnimatorの䜿甚を開始したアニメヌションをキャンセルする堎合は、それらぞのリンクを保存し、適切なタむミングでキャンセルを呌び出す必芁がありたす。



珟圚発生しおいる珟圚のアニメヌションをキャンセルする必芁があるのはい぀ですか たず、ナヌザヌは䜕らかのアクションを通じお、アニメヌションを開始した珟圚のアクションをキャンセルしおいるこずを知らせたす。 その埌、元に戻すこずができ、ビュヌを初期状態に戻したす。 しかし、別の状況がありたす。



たずえば、ナヌザヌがこのアクティビティをすべお閉じおこの画面を終了し、Animatorが匕き続き機胜する堎合は、単にコンテキストをリヌクするこずがありたすが、これは垞にあたり良くありたせん。 したがっお、今回は乗車のように思えおも、ValueたたはObjectAnimatorぞのリンクを維持するこずが重芁です。あなたを動揺させる必芁がありたす。ほずんど垞にAnimatorぞのリンクを維持する必芁がありたす。ビュヌに぀いお話しおいる堎合は、珟圚のアニメヌションをキャンセルする必芁がありたす。



view , Measure/Layout, view . , . - , Android 16 2/3 , ? , , layout pass, Measure Layout, , , . , , Measure Layout, , , , . , , , , , .



, , . , Measure Layout — , , , .



? . view ObjectAnimators, Top Bottom, , set Top Bottom , . , , , Layout, , , , , , , .



. , Measure Layout — , - , , . , — Measure/Layout, — , - . , - , , , Measure/Layout. - , . , .



, LayoutTransition, animateLayoutChanges, . ValueAnimator. ? LayoutTransition - ViewGroup, childs ViewGroup, , , . LayoutTransition , , .



LayoutTransition, - , , , LinearLayout, animateLayoutChanges, true, , , , , . . , . layout , LayoutTransition - .



, . . , . - , -, , , -, , .



. ?





LayoutTransition, , LayoutTransition Changing. , childs layout, LayoutTransition, , . LinearLayout, LinearLayouts . , LinearLayouts, , .



, , , . , , , . , layout, , ? LayoutTransition LinearLayout .





. ?



. , - . . - , - . , . , . ? それを理解したしょう。



LayoutTransition - , , childs, , LayoutTransition, , , . , , — setAnimateParentHierarchy, true.



, LinearLayout, , , , .



LinearLayouts, , AnimateParentHierarchy true, view LayoutTransition, , . , , LayoutTransition, , delay, , setAnimateParentHierarchy false, .





. layout. - , .



, LayoutTransition . Appearing Disappearing — view .



Changeappearing Changedisappearing — transitions, . parent childs parent.



Changing, , view.



, , LayoutTransition , - . , , ViewGroup LayoutTransition, , . — .



. , : , view, . . , ImageView , .



, view . , , , , . , view, , view, .



Android -, - , , Transition Framework.



Transition Framework , LayoutTransition. , , Transition, , , . childs, . , LayoutTransition . . Transition Framework . , Android 4.4. transitions Android. Android 5.



, , .





, view, , .



? TransitionSet, transition. ChangeBounds — Transition, layout, layout .



Fade, Fade.



TransitionSet — AnimatorSet, Transition.



beginDelayedTransition, Transition. , , , , Transition, , . , .



, , . LayoutTransition ViewGroup, .



, BeginDelayedTransition, view, layout, .



transitions ? . ChangeBounds Fade . Android 5 , . , - Transition, , .



, Transition — , , . , . , Transition , .



— Slide. , Fade, - . , -, view , - , , . Transition Slide.



, , , . . Slide, TransitionChangeBounds.



Transition, Explode. , - . , , - . , Explode, , , , . API.



ChangeTransform — Transition, view.



ImageView. Transition, ChangeImageTransform. , preview- SkillType ImageView, , , , Transition ImageView.



ChangeImageTransform, ImageView ChangeBounds.



, , , , . , , excludeTarget, ID, , . ID, true.



, , . , , , , , - , ID, view. - , : «, - , , view», excludeTarget, false. ID, view. excludeTarget, excludeChildren.



— , view , , : , view root. addTarget, Transition, view .



ID, view. -, - , removeTarget.





Transition Framework , Transitions, internet- XML. , , Transition. TransitionInflater Java- XML Transition. Transition.





Transition Framework . , layout.



? XML view ID, , Transition Framework , view , . go, layout .



ID - , TransitionName, , , Android 5, Transition Framework view, ID.



Transition Framework Android. , , Support Library, . Fade ChangeBounds Android 4.4, 4.0 4.3. . . , , , , , , , , , , Overview Support Library. , , , , , , .



, - layout : LayoutTransition Transition Framework? LayoutTransition , , - , , , 4.0, . Transition Framework, , , - Android.



, . , , , - , , , . , , , , - .







, . , , , , , . , , , .



, . , - , . view . rocket science . , , , ValueAnimator.



ValueAnimator, ? , , , , , , . , . - , .



Android , Dynamic animation, Physic-based animation. , , , .



, , , , FlingAnimation SpringAnimation. FlingAnimation , - , , , , , . SpringAnimation — - .



, , Dynamic animation .



, , , ValueAnimator ObjectAnimator. , , .



Dynamic animation .



: « ? ?». すべおが非垞に簡単です。 , , . .



Dynamic animation . — , .



FlingAnimation «», , . SpringAnimation , , , , , . «».



, , .



, , FlingAnimation. よし , . . いいね





, .



, , touch-. , view, Listener RecyclerView, onTouchListener ( , ), RecyclerView Listener, .



velocityTracker — Android, , — , , , , ActionUp, ActionCancel, - view , , , . velocityTracker, computeCurrentvelocity, FlingAnimation, , velocityTracker, , , view , , .



EndListener — , .



, , , onStop.



, , - , Start.



, view? view, - . , , view .



, Dynamic animation.



, Fling. , SpringAnimation, view . , .



, , , , .



, . ( GitHub: bit.ly/2uQPiSY .)





FlingAnimation EndListener , , , , SpringAnimation, SpringForce, , , , , .



, , , , , , - Dynamic Animation.



Dynamic animation. FlingAnimation , , , SpringAnimation, , , - .



, - .



, — , , . . : « ?», , - .



-, , , Transition Framework, ObjectAnimation, ViewPropertyAnimator, Dynamic animation.



, : Android 4.3 . , . . - - . , . .



そしお最埌の1぀。 , . , . Developer Settings, . , 5x — , . — , , - .



, , - , Android. ItemAnimator, RecyclerView. . ItemAnimator — , , .



ItemAnimator, , , DefaultItemAnimator, RecyclerView. .



AnimatedVectorDrawable, . Android, compatibility- Support Library. - , Android 4, . StackOverflow , AnimatedVectorDrawableCompat .



Activity Fragment Transition — activity . Transition Framework, API .



, . . , . .



: , Telegram



All Articles