android基礎(chǔ)入門教程8.4.4動畫合集之屬性_第1頁
android基礎(chǔ)入門教程8.4.4動畫合集之屬性_第2頁
android基礎(chǔ)入門教程8.4.4動畫合集之屬性_第3頁
android基礎(chǔ)入門教程8.4.4動畫合集之屬性_第4頁
android基礎(chǔ)入門教程8.4.4動畫合集之屬性_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余14頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、title: Android基礎(chǔ)入門教程8.4.4 Android動畫合集之屬性動畫-又見 categories: Android基礎(chǔ)入門,教程Android基礎(chǔ)入門教程8.4.4Android動畫合本節(jié)引言上節(jié)我們對上節(jié)我們對ndrod一知半解的狀態(tài)了,本節(jié)我們繼續(xù)來探究ndrod屬性動畫的一些更高級的用法!依舊貼下郭神的三篇文章Android屬性動畫完全解析(上),初識屬性動畫的基本用ndrod屬性動畫完全解析(中),auenaor和benaor的高級用法 ndrod屬性動畫完全解析(下),Inerpoaor和eroperynaor的用法內(nèi)容依舊是參考的上述三篇文章,好的,開始本節(jié)內(nèi)容Ev

2、aluator自定上上一節(jié)中的ValueAnimator的簡單實(shí)用,使用動畫的第一步都是調(diào)用auenaorof(),oflo()或ofObject()靜態(tài)方法創(chuàng)建auenaor實(shí)例!在例子中,ofIn和ofFoa作!那么ofObject()?初始對象和結(jié)束對象?如何過渡法?或者說這玩意怎么用好的,帶著疑問,我們先來了解一個東西:Evaluator,在屬性動畫概念叨叨逼處其實(shí)們就說到了這個東西用來告訴動畫系統(tǒng)如何從初始值過渡到結(jié)束值我們進(jìn)去InEauaor的源碼,看下里面寫了些什么?嗯,實(shí)現(xiàn)了TypeEvaluator接口,然后重寫了evaluate()方法,參數(shù)有三個,依次是endValue:

3、動畫的結(jié)束動畫的值 = 初始值 + 完成度 * (結(jié)束值 - 初始值同樣的還有FoaEauaor,們就要自己來實(shí)現(xiàn)TypeEvaluator接口,即自定義Evaluator了,說多無益,寫個例子來看看運(yùn)行效果圖代碼實(shí)現(xiàn)定義一個對象Point.java,對象中只有x,y兩個屬性以及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;然后自定義一個View類:AnimView.java,很簡單* 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í)例化這個View即可public class MainActivity extends AppCompatActivity protected void onCr

9、eate(Bundle savedInstanceState) setContentView(new AnimView(this);我我們上面示例的基礎(chǔ)上加上圓移動時的顏色變化 int color來控制顏色,另外寫上getColor()和setColor()的方法,我們先來自定義個 運(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那里加個color,get和set方法;創(chuàng)建一個和naorSe直接另外建個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, /動畫集合將前面兩個動畫加到一起,with同時播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ǔ)間動畫的時候我們就講過這個東東了不知道你還有印象沒該接口是用于兼容之前的Inerpoaor的,這使得所有過去的Inerpoaor直接拿過來 animatorSet.setInterpolator(newanimatorSet.setInterpolator(new 括號里的值用于控制加速度運(yùn)行效果

16、好像有點(diǎn)不和常理,正常應(yīng)該是會彈起來的吧,我們換成BounceInterpolator試試嘿嘿,效果蠻贊的,當(dāng)然還有多個系統(tǒng)提供好的Inerpoaor,里就不慢慢跟大家糾結(jié)了下面我們來看看我我們先到TimeInterpolator接口的源碼,發(fā)現(xiàn)這里只有一個getInterpolation()方法簡單的解釋geInerpoaon()方法中接收一個npu變化,不過它的變化是非常有規(guī)律的,就是根據(jù)設(shè)定的動畫時長勻速增加,變化范圍是到也就是說當(dāng)動畫一開始的時候npu的值是,到動畫結(jié)束的時候npu的值是的值則是隨著動畫運(yùn)行的時長在0到1之間變化的這里的input值決定了我們TypeEvaluator接

17、口里的fraction的值npu的值是由系統(tǒng)經(jīng)過計算后傳入到geInerpoaon()實(shí)現(xiàn)etterpoltio()方法中的算法,根據(jù)npu就是fraon了。我們可以看看LinearInterpolator里的代碼這里沒有處理過直接返回input值,即fraction的值就是等于input的值,這就是勻速運(yùn)的Inerpoaor次體會到數(shù)學(xué)的重要性了,這里再貼個BounceInterpolator的源碼吧這個Interpolator是先加速后減速效果的(float)(Math.cos(input + 1) * Math.PI) / 2.0f) + 0.5f 的算法理解 對應(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)中附增的一個新的功能,為后系統(tǒng)當(dāng)中附增的一個新的功能,為e假如是以前,讓一個Texe從正常狀態(tài)變成透明狀態(tài),會這樣寫:ObjectAnimator animator = ObjectAnimator.ofFloat(textview, alpha, ;而使用ViewPropertyAnimator來實(shí)現(xiàn)同樣的效果則顯得更加易懂還支持連綴用法,組合多個動畫,設(shè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論