android 创建文件夹_Android 动画小记
精簡介紹Android中的動畫,主要介紹用法。
動畫種類
包括了:補間動畫、逐幀動畫、屬性動畫,前兩者統稱為視圖動畫。
補間動畫
包括了平移、旋轉、縮放和透明度四種,每種動畫支持xml和代碼設置。另外還有一種組合動畫,就是將四種基礎動畫進行任意組合。
PS:注意補間動畫后其實View的事件響應區域并沒有發生改變,也就是如果使用平移動畫,平移后最終視圖停下的位置,這時候并不響應點擊,類似的情況還包括了:放大或縮小的View,透明度為0的View,其實可點擊位置和動畫前一致。
特殊應用場景:
Activity切換,使用overridePendingTransition方法;
Fragment切換,使用FragmentTransaction的setCustomAnimations方法。
動畫屬性值
將所有的動畫xml放在資源文件夾下的anim文件夾下。
平移、旋轉、縮放、透明度和組合動畫對應的標簽分別為translate、rotate、scale、alpha和set。
公共屬性含義
android:duration 時長
ndroid:startOffset 延遲開始時間,單位ms
android:fillBefore 完播視圖是否會停留在初始位置,默認為true
android:fillAfter 完播視圖是否會停留在結束位置,優先于fillBefore值,默認為false
android:repeatMode 重復播放動畫模式,restart代表正序重放,reverse代表倒序回放,默認為restart
android:repeatCount 重放次數,-1為無限重復
android:interpolator 動畫插值器,@android:anim可以選擇Android提供的
屬性值的距離表示方式:固定數字、百分比、父布局百分比。
為數字時(如50),基于View的左上角偏移50px的點,代碼中是Animation.ABSOLUTE;
為百分比時(如50%),基于View的左上角偏移自身寬或高50%,代碼中是Animation.RELATIVETOSELF;
為百分比p時(如50%p),基于View的左上角偏移父布局寬或高50%,代碼中是Animation.RELATIVETOPARENT。
平移動畫
android:fromXDelta 水平方向起始值
android:toXDelta 水平方向結束值
android:fromYDelta 垂直方向起始值
android:toYDelta 垂直方向結束值
旋轉動畫
android:fromDegrees 開始角度
android:toDegrees 結束角度
android:pivotX 旋轉點x坐標
android:pivotY 旋轉點y坐標
縮放動畫
android:fromXScale X方向開始縮放倍數
android:toXScale X方向結束縮放倍數
android:fromYScale Y方向開始縮放倍數
android:toYScale Y方向結束縮放倍數
android:pivotX 縮放點x坐標
android:pivotY 縮放點y坐標
透明度
android:fromAlpha 開始透明度
android:toAlpha 結束透明度
代碼設置動畫
加載動畫資源文件
val animation = AnimationUtils.loadAnimation(this, R.anim.test_animation)
動畫開始
btn.startAnimation(animation)
動畫結束
btn.clearAnimation()
動畫對象
TranslateAnimation、RotateAnimation、ScaleAnimation、AlphaAnimation、AnimationSet
動畫監聽器,調用Animation對象的setAnimationListener方法即可,其中Listener可以使用AnimatorListenerAdapter,這樣不需要重寫所有的接口方法。
逐幀動畫
用一組圖片,然后控制每張圖片的停留時間,來形成一個動畫。
同樣在anim文件夾下創建動畫文件,然后使用animation-list為根標簽。
android:oneshot 設置是否只播放一次,默認為false
設置每幀動畫
涉及對象AnimationDrawable,直接獲取view的drawable對象,然后強轉為AnimationDrawable,其中start動畫開始,stop動畫結束。
不過這種動畫方式容易引起OOM,因為需要加載大量的圖片資源。
屬性動畫
解決視圖動畫的痛點:視圖的屬性并不改變,容易給用戶造成錯覺;動畫形式單一。
核心類:ValueAnimator和ObjectAnimator。
使用ValueAnimator,其本質并不修改View的相關屬性,只是提供一個進度值。
創建,都可以傳多個參數
ValueAnimator.ofInt(int value)
ValueAnimator.ofFloat(float values)
ValueAnimator.ofObject(int values)
動畫設置方法
setDuration:動畫時長
setStartDelay:開始延時時長
setRepeatCount:動畫重復次數
setRepeatMode:動畫重復模式
addUpdateListener:核心方法,在接口中通過animation.getAnimatedValue()獲取當前值,然后對View中的某些屬性進行設置。
常用的屬性:width、height、alpha、x、y、scaleX、scaleY等,在設置完成后調用view.requestLayout()方法。
也可以通過xml設置,在res文件夾中的animator文件夾下。
其中屬性包含了視圖動畫中所有的基本屬性,特殊屬性包括了:
根標簽:animator
android:valueFrom 初始值
android:valueTo 結束值
android:valueType 變化值類型,可選floatType & intType
加載xml文件,直接將對象強轉為ValueAnimator。
AnimatorInflater.loadAnimator(this, R.animator.test_animator)
ObjectAnimator,對ValueAnimator進行封裝,直接作用于View上,更改其中的屬性值。
ObjectAnimator.ofFloat(Object object, String property, float ....values)
object,一般傳入View,property傳入view的屬性。
xml形式,使用objectAnimator根標簽,特殊屬性:
android:valueFrom:初始值
android:valueTo:結束值
android:valueType 變化值類型 :floatType & intType
android:propertyName 對象變化的屬性名稱
常用屬性:alpha、rotation、translationX、scaleX、translationY、scaleY
注意,如果想要對象對話生效,需要滿足兩個條件:提供屬性set方法和對屬性的改變必須通過某種方法反映出來。
動畫修改View的寬高
使用ValueAnimator,動態修改LayoutParam中的width和heigh;
給View進行包裝一下
ObjectAnimator.ofInt(wrapper, "width", 500)
組合動畫:AnimatorSet
ObjectAnimator簡寫
view.animate().scaleX(1.0f).scaleY(1.0f).setDuration(200).start()
歡迎關注微信公眾號:SimFG,讓我們一起學習一起進步
總結
以上是生活随笔為你收集整理的android 创建文件夹_Android 动画小记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab三角形分割,MATLAB 2
- 下一篇: php用wordanalysis抓取姓名