




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、title: Android基礎(chǔ)入門教程8.4.4 Android動(dòng)畫合集之屬性動(dòng)畫-又見(jiàn) categories: Android基礎(chǔ)入門,教程Android基礎(chǔ)入門教程8.4.4Android動(dòng)畫合本節(jié)引言上節(jié)我們對(duì)上節(jié)我們對(duì)ndrod一知半解的狀態(tài)了,本節(jié)我們繼續(xù)來(lái)探究ndrod屬性動(dòng)畫的一些更高級(jí)的用法!依舊貼下郭神的三篇文章Android屬性動(dòng)畫完全解析(上),初識(shí)屬性動(dòng)畫的基本用ndrod屬性動(dòng)畫完全解析(中),auenaor和benaor的高級(jí)用法 ndrod屬性動(dòng)畫完全解析(下),Inerpoaor和eroperynaor的用法內(nèi)容依舊是參考的上述三篇文章,好的,開(kāi)始本節(jié)內(nèi)容Ev
2、aluator自定上上一節(jié)中的ValueAnimator的簡(jiǎn)單實(shí)用,使用動(dòng)畫的第一步都是調(diào)用auenaorof(),oflo()或ofObject()靜態(tài)方法創(chuàng)建auenaor實(shí)例!在例子中,ofIn和ofFoa作!那么ofObject()?初始對(duì)象和結(jié)束對(duì)象?如何過(guò)渡法?或者說(shuō)這玩意怎么用好的,帶著疑問(wèn),我們先來(lái)了解一個(gè)東西:Evaluator,在屬性動(dòng)畫概念叨叨逼處其實(shí)們就說(shuō)到了這個(gè)東西用來(lái)告訴動(dòng)畫系統(tǒng)如何從初始值過(guò)渡到結(jié)束值我們進(jìn)去InEauaor的源碼,看下里面寫了些什么?嗯,實(shí)現(xiàn)了TypeEvaluator接口,然后重寫了evaluate()方法,參數(shù)有三個(gè),依次是endValue:
3、動(dòng)畫的結(jié)束動(dòng)畫的值 = 初始值 + 完成度 * (結(jié)束值 - 初始值同樣的還有FoaEauaor,們就要自己來(lái)實(shí)現(xiàn)TypeEvaluator接口,即自定義Evaluator了,說(shuō)多無(wú)益,寫個(gè)例子來(lái)看看運(yùn)行效果圖代碼實(shí)現(xiàn)定義一個(gè)對(duì)象Point.java,對(duì)象中只有x,y兩個(gè)屬性以及get,set方法* Created by Jay on 2015/11/18 publicclass Point private float x; private float public Point() publicPoint(float x,float y) this.x = x;this.y = public
4、float getX() return x;public float getY() return y;public void setX(float x) this.x = x;public void setY(float y) this.y = y;接著自定義Evaluator類:PointEvaluator.java,實(shí)現(xiàn)接口重寫evaluate方法* Created by Jay on 2015/11/18 public class PointEvaluator implements TypeEvaluator public Point evaluate(float fraction, P
5、oint startValue, Point endVa lue) float x = startValue.getX() + fraction * (endValue.getX() - sta float y = startValue.getY() + fraction * (endValue.getY() - sta Point point =newPoint(x, y); return point;然后自定義一個(gè)View類:AnimView.java,很簡(jiǎn)單* Created by Jay on 2015/11/18 public class AnimView extends View
6、publicstaticfinal float RADIUS =private Point private Paint mPaint; public AnimView(Context context) this(context, public AnimView(Context context, AttributeSet attrs) super(context, public AnimView(Context context, AttributeSet attrs, int defStyleAt tr) super(context, attrs, private void init() mPa
7、int =new private void drawCircle(Canvas float x = float y = canvas.drawCircle(x, y, RADIUS, private void startAnimation() Point startPoint =new Point(RADIUS, Point endPoint = new Point(getWidth() - RADIUS, getHeight() - R ValueAnimator anim = ValueAnimator.ofObject(new ), startPoint, anim.addUpdateL
8、istener(new public void onAnimationUpdate(ValueAnimator animation) currentPoint =(Point) protected void onDraw(Canvas canvas) if (currentPoint = null) currentPoint = new Point(RADIUS, RADIUS); else 最后MainActivity.java處實(shí)例化這個(gè)View即可public class MainActivity extends AppCompatActivity protected void onCr
9、eate(Bundle savedInstanceState) setContentView(new AnimView(this);我我們上面示例的基礎(chǔ)上加上圓移動(dòng)時(shí)的顏色變化 int color來(lái)控制顏色,另外寫上getColor()和setColor()的方法,我們先來(lái)自定義個(gè) 運(yùn)行效果圖* Created by Jay on 2015/11/18 public class ColorEvaluator implements TypeEvaluator public Integer evaluate(float fraction, Integer startValue, Integer e
10、ndValue) int alpha = (int) (Color.alpha(startValue) + fraction * (Color.alpha(endValue) - Color.alpha(startValue);int red = (int) (Color.red(startValue) + fraction * (Color.red(endValue)-int green = (int) (Color.green(startValue) + fraction * (Color.green(endValue) - Color.green(startValue);int blue
11、 = (int) (Color.blue(startValue) + fraction * (Color.blue(endValue) - Color.blue(startValue);return Color.argb(alpha, red, green, 然后自定義View那里加個(gè)color,get和set方法;創(chuàng)建一個(gè)和naorSe直接另外建個(gè)e吧* Created by Jay on 2015/11/18 public class AnimView2 extends View publicstaticfinal float RADIUS =private Point private P
12、aint private int mColor; public AnimView2(Context context) this(context, public AnimView2(Context context, AttributeSet attrs) super(context, public AnimView2(Context context, AttributeSet attrs, int defStyleA ttr) super(context, attrs, private void init() mPaint =new private void drawCircle(Canvas
13、float x = float y = canvas.drawCircle(x, y, RADIUS, private void startAnimation() Point startPoint =new Point(RADIUS, Point endPoint = new Point(getWidth() - RADIUS, getHeight() - R ValueAnimator anim = ValueAnimator.ofObject(new ), startPoint, anim.addUpdateListener(new () public void onAnimationUp
14、date(ValueAnimator animation) currentPoint =(Point) ObjectAnimator objectAnimator = ObjectAnimator.ofObject(this, color,new Color.BLUE, /動(dòng)畫集合將前面兩個(gè)動(dòng)畫加到一起,with同時(shí)播AnimatorSet animatorSet = new protected void onDraw(Canvas canvas) if (currentPoint = null)currentPoint =new Point(RADIUS, else /color的get和s
15、et方法public int getColor() return public void setColor(int color) mColor = 然后MainActivity,setContentView那里把AnimView改成AnimView2就好Interpolator(補(bǔ)間器嗯,在嗯,在講補(bǔ)間動(dòng)畫的時(shí)候我們就講過(guò)這個(gè)東東了不知道你還有印象沒(méi)該接口是用于兼容之前的Inerpoaor的,這使得所有過(guò)去的Inerpoaor直接拿過(guò)來(lái) animatorSet.setInterpolator(newanimatorSet.setInterpolator(new 括號(hào)里的值用于控制加速度運(yùn)行效果
16、好像有點(diǎn)不和常理,正常應(yīng)該是會(huì)彈起來(lái)的吧,我們換成BounceInterpolator試試嘿嘿,效果蠻贊的,當(dāng)然還有多個(gè)系統(tǒng)提供好的Inerpoaor,里就不慢慢跟大家糾結(jié)了下面我們來(lái)看看我我們先到TimeInterpolator接口的源碼,發(fā)現(xiàn)這里只有一個(gè)getInterpolation()方法簡(jiǎn)單的解釋geInerpoaon()方法中接收一個(gè)npu變化,不過(guò)它的變化是非常有規(guī)律的,就是根據(jù)設(shè)定的動(dòng)畫時(shí)長(zhǎng)勻速增加,變化范圍是到也就是說(shuō)當(dāng)動(dòng)畫一開(kāi)始的時(shí)候npu的值是,到動(dòng)畫結(jié)束的時(shí)候npu的值是的值則是隨著動(dòng)畫運(yùn)行的時(shí)長(zhǎng)在0到1之間變化的這里的input值決定了我們TypeEvaluator接
17、口里的fraction的值npu的值是由系統(tǒng)經(jīng)過(guò)計(jì)算后傳入到geInerpoaon()實(shí)現(xiàn)etterpoltio()方法中的算法,根據(jù)npu就是fraon了。我們可以看看LinearInterpolator里的代碼這里沒(méi)有處理過(guò)直接返回input值,即fraction的值就是等于input的值,這就是勻速運(yùn)的Inerpoaor次體會(huì)到數(shù)學(xué)的重要性了,這里再貼個(gè)BounceInterpolator的源碼吧這個(gè)Interpolator是先加速后減速效果的(float)(Math.cos(input + 1) * Math.PI) / 2.0f) + 0.5f 的算法理解 對(duì)應(yīng)的曲線圖如下自定義 示
18、例代碼如private class DecelerateAccelerateInterpolator implements TimeInterpolator public float getInterpolation(float input) if (input 0.5) return(float)(Math.sin(input *Math.PI)/else return1-(float)(Math.sin(input *Math.PI)/調(diào)用setInterpolator(new DecelerateAccelerateInterpolator()設(shè)置下即可后系統(tǒng)當(dāng)中附增的一個(gè)新的功能,為后系統(tǒng)當(dāng)中附增的一個(gè)新的功能,為e假如是以前,讓一個(gè)Texe從正常狀態(tài)變成透明狀態(tài),會(huì)這樣寫:ObjectAnimator animator = ObjectAnimator.ofFloat(textview, alpha, ;而使用ViewPropertyAnimator來(lái)實(shí)現(xiàn)同樣的效果則顯得更加易懂還支持連綴用法,組合多個(gè)動(dòng)畫,設(shè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南省昆明市黃岡實(shí)驗(yàn)校2025年初三第一次聯(lián)考試題英語(yǔ)試題試卷含答案
- 貴州護(hù)理職業(yè)技術(shù)學(xué)院《園藝學(xué)通論》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西金融職業(yè)學(xué)院《應(yīng)用統(tǒng)計(jì)分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 撫州職業(yè)技術(shù)學(xué)院《媒體寫作B》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西省贛州市紅旗實(shí)驗(yàn)中學(xué)2024-2025學(xué)年高三1月月考數(shù)學(xué)試題試卷含解析
- 吉林城市職業(yè)技術(shù)學(xué)院《植物保護(hù)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海健康醫(yī)學(xué)院《數(shù)據(jù)科學(xué)與工程算法》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇省徐州市樹(shù)恩中學(xué)2024-2025學(xué)年高一下學(xué)期第一次月考地理試題(含答案)
- 帆布戶外裝備的多功能性與智能化發(fā)展趨勢(shì)考核試卷
- 有機(jī)原料的化學(xué)合成途徑考核試卷
- 城鄉(xiāng)融合指標(biāo)體系構(gòu)建的四個(gè)維度和四個(gè)向度
- 直流輸電技術(shù)培訓(xùn)課件
- 《工業(yè)園區(qū)物業(yè)服務(wù)》課件
- 紅樓夢(mèng)第三回課件
- 【語(yǔ)文課件】地動(dòng)儀課件
- 汽車駕駛員(高級(jí))考試題庫(kù)及答案
- 2024全新潔凈室培訓(xùn)
- 國(guó)企內(nèi)部紀(jì)檢監(jiān)督培訓(xùn)
- 團(tuán)員發(fā)展紀(jì)實(shí)簿
- 人教版五年級(jí)英語(yǔ)單詞
- 大象版科學(xué)三年級(jí)下冊(cè)全冊(cè)練習(xí)題(含答案)
評(píng)論
0/150
提交評(píng)論