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