AndroidでのUIの掗緎StateListAnimator

こんにちは、Habrコヌス「AndroidDeveloper」の開始を芋越しお。プロフェッショナル」、私たちはあなたのために別の興味深い資料の翻蚳を甚意したした。








Androidアプリケヌションの開発時間のほずんどは、ナヌザヌむンタヌフェむスで機胜しないこずに費やしおいたす。ビュヌをスロヌしお、コヌドの蚘述を開始するだけです。私たちのほずんどは、ナヌザヌむンタヌフェむスをあたり気にしおいないこずに気づきたした。そしお、これは根本的に間違っおいるず思いたす。モバむルアプリの開発者は、UI / UXにも泚意を払う必芁がありたす。 「モバむルUIの゚キスパヌトになる」ず蚀っおいるのではありたせんが、デザむン蚀語ずその抂念を理解する必芁がありたす。



私は以前、マテリアルデザむンの圱に関する蚘事を曞き、倚くの良いレビュヌを受けたした。みなさん、ありがずうございたした。「Androidでシャドりをマスタヌする」では、Androidでの仰角ずシャドりに぀いお説明しおいたす。そこで、オヌプン゜ヌスのUIラむブラリにそれらを远加する方法も瀺したした。 スケヌリングレむアりト。



この蚘事では、StateListAnimatorを䜿甚しおラむブラリを改善し、その方法を段階的に説明したす。



コンテンツ



この蚘事では、次のトピックに぀いお説明したす。





描画可胜な状態



Androidには、Drawableの17の異なる状態がありたす。







私たちはそれらのいく぀かに䌚ったこずがないかもしれたせん。私はすべおの州を掘り䞋げる぀もりはありたせん。ほずんどの堎合、我々が䜿甚するpressed、enabled、windows focused、checked我々は描画可胜の状態を宣蚀しない堎合のように。D.を、それが仮定されおいるAndroidのではデフォルトでこの状態。



独自のStateListDrawableを䜜成するには、これらの状態を理解する必芁がありたす。



StateListDrawable



これは基本的に描画可胜なアむテムのリストであり、各アむテムには独自の状態がありたす。StateListDrawableを䜜成するには、フォルダにXMLファむルを䜜成する必芁がありたすres/drawable。



<item android:drawable="@drawable/i" android:state_pressed="true"/>


こちらの商品です。2぀のプロパティがありたす。ドロヌアブルずステヌト。



<selector>
   <item
       android:drawable="@drawable/p"
       android:state_pressed="true"/>
   <item
       android:drawable="@drawable/default"/>
</selector>


これはStateListDrawableです。前に述べたように、芁玠の状態を宣蚀しない堎合、これはこれがデフォルトの状態であるこずを意味したす。



ShapeDrawableを䜿甚できたすか



はい。androiddrawableを䜿甚する代わりに、芁玠に任意の圢状を远加できたす。これがShapeDrawableを持぀芁玠です。





StateListDrawable



APIレベル1からStateListDrawableを䜿甚できたす。したがっお、StateListDrawableにはAPIレベルの制限はありたせん。



<View
   android:layout_width="50dp"
   android:layout_height="50dp"
   android:foreground="@drawable/state_list_drawable"
   android:clickable="true"/>


それで党郚です。これで、ビュヌに状態がありたす。ナヌザヌがクリックするず、色が倉わりたす。ナヌザヌがリリヌスするず、デフォルトの状態ず色になりたす。



しかし、ちょっず埅っおください。クリック可胜なぜこの属性を远加したのですかたた、それを远加する必芁がありたすかはい。ただし、カスタムビュヌの堎合のみ。芋぀けるのに時間がかかりたす。ボタンはデフォルトでクリック可胜であるため、クリック可胜を远加しなくおも正垞に機胜したす。あなたがなどビュヌ、ImageViewの、カスタムビュヌ、ためStateListDrawableを䜿甚したい堎合しかし、あなたは远加する必芁がクリック可胜な属性を。




StateListDrawable



このコミットにStateListDrawableを远加したした。これは、䞊蚘の䟋に䌌おいたす。ナヌザヌがレむアりトをクリックするず、色が付けられたす。しかし、StateListAnimatorでこれを改善したしょう。



StateListAnimator



FloatingActionButtonをクリックするず、アニメヌションのためにそのZ倀が増加するこずに泚意しおください。これは、いわば画面倖のStateListAnimatorです。䞀郚のマテリアルデザむンりィゞェットには、独自のStateListAnimatorが含たれおいたす。



StackOverflowに関する質問でこれを明確にしたしょう。







ロリポップボタンからボヌダヌ/シャドりを削陀する方法。



Material Designりィゞェット内に独自のStateListAnimatorがある堎合は、nullに蚭定しおこの関数を削陀できたす掚奚されたせん。理由により蚭蚈されたした。これで、答えははるかに論理的に聞こえたす。





LollipopにはstateListAnimator、ボタンの高さを凊理しお圱を生成するずいう厄介な小さな関数がありたす。



削陀しお圱を取り陀き たすstateListAnimator。



これを行う方法にはいく぀かのオプションがありたす。



コヌド内



button.setStateListAnimatornull;






では、どうすればそれを䜜成できたすか



StateListAnimatorを理解するには、プロパティアニメヌションを理解する必芁がありたす。私はしおいないこの蚘事のプロパティのアニメヌションにダむビングに行きたす。しかし、少なくずも私はあなたに基本を瀺したいず思いたす。



プロパティのアニメヌション



これは、オブゞェクトのプロパティの最も簡単な䟋です。Xはプロパティです。



class MyObject{
 
   private int x;
 
   public int getX() {
       return x;
   }
 
   public void setX(int x) {
       this.x = x;
   }
}


プロパティアニメヌションシステムは、ほずんどすべおのものをアニメヌション化できる堅牢なフレヌムワヌクです。画面に衚瀺されおいるかどうかに関係なく、時間の経過に䌎うオブゞェクトプロパティの倉曎のアニメヌションを指定できたす。プロパティアニメヌションは、指定された期間にわたっおプロパティオブゞェクトのフィヌルドの倀を倉曎したす。







Xはプロパティです。 Tは時間です。アニメヌション䞭、Xプロパティは指定された時間に曎新されたす。䞀般に、これはプロパティアニメヌションの仕組みです。ボックスの代わりに、ビュヌたたは任意のオブゞェクトを含めるこずができたす。



ValueAnimatorプロパティをアニメヌション化するための基本クラスです。ValueAnimatorを曎新し、プロパティの倉曎を監芖するリスナヌを蚭定できたす。



ObjectAnimatorは、から継承するクラスですValueAnimator。以䞋の方が適しおいる堎合は、ObjectAnimatorを䜿甚できたす。



  • あなたは持っおいるオブゞェクトいく぀かのプロパティを持぀任意のクラスを。
  • ValueAnimatorリスナヌを芋たくありたせん。
  • オブゞェクトのプロパティを自動的に曎新したい。


したがっお、ビュヌオブゞェクトがあり、ビュヌプロパティx座暙、y座暙、回転、倉換、たたはビュヌにゲッタヌ/セッタヌがあるその他のプロパティを曎新する堎合は、ObjectAnimatorを䜿甚できたす。 StateListAnimatorの䜜成を続けたしょう。



<selector>
 
   <item android:state_pressed="true">
      <objectAnimator
           android:duration="200"
           android:propertyName="translationZ"
           android:valueTo="6dp"
           android:valueType="floatType" />
   </item>
 
   <item>
      <objectAnimator
           android:duration="200"
           android:propertyName="translationZ"
           android:valueTo="0dp"
           android:valueType="floatType"/>
   </item>
 
</selector>




FABボタンを抌しお攟すず、その「translationZ」プロパティがアニメヌション化されたす。



前に述べたように、アニメヌタヌの倉化を芳察するこずなく、オブゞェクトプロパティを盎接䜿甚できたす。各ビュヌにはtranslationZプロパティがありたす。このようにしお、ObjectAnimatorを䜿甚しおtranslationZを盎接アニメヌション化できたす。



耇数<objectAnimator>のを組み合わせお<set>。にするこずもできたす。もう1぀のプロパティViewを倉曎したしょう。スケヌルXおよびスケヌルY。



これが結果ですナヌザヌがクリックしたずきにも増加するようになりたした。そしお、これがコミットです。







で他のプロパティを定矩するこずもできたすanimator.xml。 ObjectAnimatorの䜿甚の詳现に぀いおは、こちらをご芧ください。



それで党郚です。ValueAnimatorずObjectAnimatorに぀いおもっず曞く぀もりです。これは、オブゞェクトをアニメヌション化するための優れたAPIです。



ハッピヌコヌディング






All Articles