亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

定義控件三部曲之動畫篇(三)—— 代碼生成alpha、scale、translate、rotate、set及插值器動畫

2019-11-06 09:37:49
字體:
來源:轉載
供稿:網友

  轉:定義控件三部曲之動畫篇(三)—— 代碼生成alpha、scale、translate、rotate、set及插值器動畫

前言:我相信信念的力量,只要每天進步,總有一天,會與眾不同。轉到JACA以后,發現真的有好多知識要補充,不再像c++那樣,只要深入學習就好,這里沒有了深入,卻要求知識面很廣范。先把Android的知識補充完以后,再看android的書籍,最后深入學習java,兩年的時候應該來得急,努力。

不登高山,不知天之高;不臨深溪,不知地之厚

相關文章:

《Android自定義控件三部曲文章索引》

一、概述

前兩篇,我為大家講述了利用xml來定義動畫及插值器,但在代碼中,我們常常是動態生成動畫的,所以,這篇將為大家講述如何用代碼生成動態生成動畫及插值器。

先簡單寫出各個標簽對應的類,方便大家理解:

scale —— ScaleAnimationalpha —— AlphaAnimationrotate —— RotateAnimationtranslate —— TranslateAnimationset —— AnimationSet

二、Animation公共類

官方SDK講解頁面為:《Animation》

第一篇中我們提到過,Animation類是所有動畫(scale、alpha、translate、rotate)的基類,它所具有的標簽及對應函數為:

android:duration                  setDuration(long) 動畫持續時間,以毫秒為單位 android:fillAfter                    setFillAfter(boolean)如果設置為true,控件動畫結束時,將保持動畫最后時的狀態android:fillBefore                 setFillBefore(boolean)如果設置為true,控件動畫結束時,還原到開始動畫前的狀態android:fillEnabled              setFillEnabled(boolean)與android:fillBefore 效果相同,都是在動畫結束時,將控件還原到初始化狀態android:repeatCount           setRepeatCount(int)重復次數android:repeatMode            setRepeatMode(int)重復類型,有reverse和restart兩個值,取值為RESTART或 REVERSE,必須與repeatCount一起使用才能看到效果。因為這里的意義是重復的類型,即回放時的動作。android:interpolator            setInterpolator(Interpolator) 設定插值器,其實就是指定的動作效果,比如彈跳效果等

在第一篇《 Animation 動畫詳解(一)——alpha、scale、translate、rotate、set的xml屬性及用法》 我們已經講解了每個標簽具體所具有的功能,這里就不再細講,對于使用方法會在下面的各標簽中使用。

三、ScaleAnimation

這是scale標簽對應的類,官方SDK頁面為:《ScaleAnimation》

在Scale標簽中,我們提到過它的自有屬性有下面幾條,先列一下:

android:fromXScale    起始的X方向上相對自身的縮放比例,浮點值,比如1.0代表自身無變化,0.5代表起始時縮小一倍,2.0代表放大一倍;android:toXScale        結尾的X方向上相對自身的縮放比例,浮點值;android:fromYScale    起始的Y方向上相對自身的縮放比例,浮點值,android:toYScale        結尾的Y方向上相對自身的縮放比例,浮點值;android:pivotX            縮放起點X軸坐標,可以是數值、百分數、百分數p 三種樣式,比如 50、50%、50%p,當為數值時,表示在當前View的左上角,即原點處加上50px,做為起始縮放點;如果是50%,表示在當前控件的左上角加上自己寬度的50%做為起始點;如果是50%p,那么就是表示在當前的左上角加上父控件寬度的50%做為起始點x軸坐標。(具體意義,后面會舉例演示)android:pivotY           縮放起點Y軸坐標,取值及意義跟android:pivotX一樣。放到代碼中,ScaleAnimation有下面幾個構造函數:ScaleAnimation(Context context, AttributeSet attrs)  從XML文件加載動畫,基本用不到ScaleAnimation(float fromX, float toX, float fromY, float toY)ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)第一個構造函數是從本地XML文件加載動畫,基本用不到的,我們主要看下面三個構造函數。

在標簽屬性android:pivotX中有三種取值,數,百分數,百分數p;體現在構造函數中,就是最后一個構造函數的pivotXType,它的取值有三個,Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF和Animation.RELATIVE_TO_PARENT;

這三個構造函數難度不大,就不再細講,舉個例子說明:

在第一篇中Scale的例子的XML代碼為:

[html] view plain copy 在CODE上查看代碼片<?xml version="1.0" encoding="utf-8"?>  <scale xmlns:android="http://schemas.android.com/apk/res/android"      android:fromXScale="0.0"      android:toXScale="1.4"      android:fromYScale="0.0"      android:toYScale="1.4"      android:pivotX="50"      android:pivotY="50"      android:duration="700" />  

對應的代碼構造代碼為:

[java]%20view%20plain%20copy%20scaleAnim = new ScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);  scaleAnim.setDuration(700);  在控件使用的時候,同樣是使用:[java]%20view%20plain%20copy%20tv.startAnimation(scaleAnim);  

四、AlphaAnimation

這是alpha標簽對就的類,官方SDK文檔地址是:《AlphaAnimation》同樣alpha標簽自有的屬性有:android:fromAlpha  %20動畫開始的透明度,從0.0%20--1.0%20,0.0表示全透明,1.0表示完全不透明android:toAlpha%20 %20   %20動畫結束時的透明度,也是從0.0%20--1.0%20,0.0表示全透明,1.0表示完全不透明所對應的構造函數為:AlphaAnimation(Context%20context,%20AttributeSet%20attrs)%20 同樣,從本地XML加載動畫,基本不用AlphaAnimation(float%20fromAlpha,%20float%20toAlpha)這里只剩最后一個構造函數,難度不大,下面舉個例子說明下用法。

在第一篇文章中,我們構造的XML代碼為:

[java]%20view%20plain%20copy%20<?xml version="1.0" encoding="utf-8"?>  <alpha xmlns:android="http://schemas.android.com/apk/res/android"      android:fromAlpha="1.0"      android:toAlpha="0.1"      android:duration="3000"      android:fillBefore="true">  </alpha>  如果用代碼構造同樣的效果,它所對應的代碼為:[java]%20view%20plain%20copy%20alphaAnim = new AlphaAnimation(1.0f,0.1f);  alphaAnim.setDuration(3000);  alphaAnim.setFillBefore(true);  

五、RotateAnimation

RotateAnimation類對應Rotate標簽,SDK文檔地址:《RotateAnimation》

Rotate標簽所具有的XML屬性有:

android:fromDegrees  %20 %20開始旋轉的角度位置,正值代表順時針方向度數,負值代碼逆時針方向度數android:toDegrees  %20 %20 %20 %20結束時旋轉到的角度位置,正值代表順時針方向度數,負值代碼逆時針方向度數android:pivotX  %20 %20 %20 %20 %20 %20 %20縮放起點X軸坐標,可以是數值、百分數、百分數p%20三種樣式,比如%2050、50%、50%p,具體意義已在scale標簽中講述,這里就不再重講android:pivotY  %20 %20 %20 %20 %20 %20 %20縮放起點Y軸坐標,可以是數值、百分數、百分數p%20三種樣式,比如%2050、50%、50%p對應的構造函數有:RotateAnimation(Context%20context,%20AttributeSet%20attrs)  從本地XML文檔加載動畫,同樣,基本不用RotateAnimation(float%20fromDegrees,%20float%20toDegrees)RotateAnimation(float%20fromDegrees,%20float%20toDegrees,%20float%20pivotX,%20float%20pivotY)RotateAnimation(float%20fromDegrees,%20float%20toDegrees,%20int%20pivotXType,%20float%20pivotXValue,%20int%20pivotYType,%20float%20pivotYValue)

RotateAnimation跟ScaleAnimation差不多,關鍵問題同樣是pivotXType和pivotYType的選擇,同樣有三個取值:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF和Animation.RELATIVE_TO_PARENT;

根據每一篇中的XML寫出對應的JAVA構造代碼:

XML為:

[java]%20view%20plain%20copy%20<?xml version="1.0" encoding="utf-8"?>  <rotate xmlns:android="http://schemas.android.com/apk/res/android"      android:fromDegrees="0"      android:toDegrees="-650"      android:pivotX="50%"      android:pivotY="50%"      android:duration="3000"      android:fillAfter="true">        </rotate>  對應JAVA構造代碼為:[java]%20view%20plain%20copy%20rotateAnim = new RotateAnimation(0, -650, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  rotateAnim.setDuration(3000);  rotateAnim.setFillAfter(true);  

六、TranslateAnimation

很顯示TranslateAnimation類對應translate標簽,它的SDK官方文檔地址為:《TranslateAnimation》

translate標簽所具有的屬性為:

android:fromXDelta  %20 %20起始點X軸坐標,可以是數值、百分數、百分數p%20三種樣式,比如%2050、50%、50%p,具體意義已在scale標簽中講述,這里就不再重講android:fromYDelta  %20 起始點Y軸從標,可以是數值、百分數、百分數p%20三種樣式;android:toXDelta%20   %20 %20 %20結束點X軸坐標android:toYDelta  %20 %20 %20 結束點Y軸坐標這些屬性所對應的構造函數為:TranslateAnimation(Context%20context,%20AttributeSet%20attrs)%20 同樣,基本不用TranslateAnimation(float%20fromXDelta,%20float%20toXDelta,%20float%20fromYDelta,%20float%20toYDelta)TranslateAnimation(int%20fromXType,%20float%20fromXValue,%20int%20toXType,%20float%20toXValue,%20int%20fromYType,%20float%20fromYValue,%20int%20toYType,%20float%20toYValue)

由于fromXDelta、fromYDelta、toXDelta、toYDelta這三個屬性都具有三種狀態,所以在構造函數中,最理想的狀態就是第三個構造函數,能夠指定每個值的類型,第二個構造函數:TranslateAnimation%20(float%20fromXDelta,%20float%20toXDelta,%20float%20fromYDelta,%20float%20toYDelta)使用是絕對數值。只有最后一個構造函數可以指定百分數和相對父控件的百分數。

下面以第一篇中的XML代碼為例,用JAVA代碼構造同樣的效果:

XML代碼:

[html]%20view%20plain%20copy%20<?xml version="1.0" encoding="utf-8"?>  <translate xmlns:android="http://schemas.android.com/apk/res/android"      android:fromXDelta="0"       android:toXDelta="-80"      android:fromYDelta="0"      android:toYDelta="-80"      android:duration="2000"      android:fillBefore="true">  </translate>  對應的JAVA代碼為:[html]%20view%20plain%20copy%20translateAnim = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -80,           Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -80);  translateAnim.setDuration(2000);  translateAnim.setFillBefore(true);  

七:AnimationSet

AnimationSet類對應set標簽,定義動作類的集合,對應的SDK文檔地址為:《AnimationSet》它自己是沒有XML屬性的,所以我們直接說它的構造函數:AnimationSet(Context%20context,%20AttributeSet%20attrs)%20 同樣,基本不用AnimationSet(boolean%20shareInterpolator)%20 shareInterpolator取值true或false,取true時,指在AnimationSet中定義一個插值器(interpolater),它下面的所有動畫共同。如果設為false,則表示它下面的動畫自己定義各自的插值器。

增加動畫的函數為:(更多函數,請參看SDK文檔)

public%20void%20addAnimation%20(Animation%20a)

下面在第一篇中的XML代碼為例寫出能構造同樣效果的JAVA代碼:

XML代碼為:

[html]%20view%20plain%20copy%20<?xml version="1.0" encoding="utf-8"?>  <set xmlns:android="http://schemas.android.com/apk/res/android"      android:duration="3000"      android:fillAfter="true">          <alpha       android:fromAlpha="0.0"      android:toAlpha="1.0"/>        <scale      android:fromXScale="0.0"      android:toXScale="1.4"      android:fromYScale="0.0"      android:toYScale="1.4"      android:pivotX="50%"      android:pivotY="50%"/>        <rotate      android:fromDegrees="0"      android:toDegrees="720"      android:pivotX="50%"      android:pivotY="50%"/>           </set>  對應的JAVA代碼為:[java]%20view%20plain%20copy%20alphaAnim = new AlphaAnimation(1.0f,0.1f);  scaleAnim = new ScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);  rotateAnim = new RotateAnimation(0, 720, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);    setAnim=new AnimationSet(true);  setAnim.addAnimation(alphaAnim);  setAnim.addAnimation(scaleAnim);  setAnim.addAnimation(rotateAnim);    setAnim.setDuration(3000);  setAnim.setFillAfter(true);  

八、Interpolater插值器

關于插值器的效果及應用,我們專門開了一篇來講,看這里:《Animation動畫詳解(二)——Interpolator插值器》

關于插值器的SDK講解見《Animation%20Resources》中的Interpolators部分;

插值器XML屬性及對應的類如下表所示:

Interpolator%20classResource%20IDAccelerateDecelerateInterpolator@android:anim/accelerate_decelerate_interpolatorAccelerateInterpolator@android:anim/accelerate_interpolatorAnticScaleAnimation interpolateScaleAnim=new ScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);  interpolateScaleAnim.setInterpolator(new BounceInterpolator());  interpolateScaleAnim.setDuration(3000);  

九、示例,   

源碼下載地址:http://download.csdn.net/detail/harvic880925/8047669

請大家尊重原創者版權,轉載請標明出處:http://blog.csdn.net/harvic880925/article/details/40117115 謝謝!

如果我的文章有幫到您,記得加關注哦!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产91色在线| 色偷偷综合社区| 久久精品国产亚洲精品2020| 国产精品视频男人的天堂| 久久精品视频中文字幕| 欧美一区二区三区免费观看| 国产精品久久久久国产a级| 久久久99久久精品女同性| 91经典在线视频| 亚洲色图国产精品| 欧美贵妇videos办公室| 亚洲黄色免费三级| 国产日韩欧美影视| 日韩成人在线视频网站| 中文字幕一区电影| 91亚洲一区精品| 亚洲三级av在线| 精品在线观看国产| 欧美片一区二区三区| 国产精品久久久久久久9999| 中文国产亚洲喷潮| 成人黄色av网站| 日韩av最新在线观看| 亚洲精品91美女久久久久久久| 欧美黄色片在线观看| 最新69国产成人精品视频免费| 亚洲精品国产精品乱码不99按摩| 青青a在线精品免费观看| 精品综合久久久久久97| 91国产视频在线| xxx欧美精品| 成人性生交大片免费看小说| 狠狠做深爱婷婷久久综合一区| 奇米四色中文综合久久| 国产亚洲成精品久久| 国产精品2018| 亚洲码在线观看| 欧美在线视频a| 欧美亚洲国产视频| 欧美性一区二区三区| 欧美精品一区三区| 最好看的2019的中文字幕视频| 正在播放国产一区| 中文字幕欧美日韩| 国产亚洲精品美女| 91精品91久久久久久| 亚洲精品成人久久| 中文字幕精品—区二区| 精品国产乱码久久久久酒店| 成人在线播放av| 欧美中文字幕在线视频| 91夜夜揉人人捏人人添红杏| 国产精品黄视频| 亚洲人成亚洲人成在线观看| 久久天天躁夜夜躁狠狠躁2022| 茄子视频成人在线| 亚洲最新av在线网站| 国产日韩欧美中文在线播放| 国产99久久精品一区二区| 97在线视频免费观看| 日韩精品免费观看| 日日骚av一区| 欧美日韩人人澡狠狠躁视频| 久久九九热免费视频| 91精品久久久久| 国产欧美精品一区二区三区介绍| 欧美视频精品一区| 久久久91精品国产一区不卡| 在线精品国产欧美| 中文字幕亚洲天堂| 日本精品久久久久久久| 欧美日本高清一区| 久久久久一本一区二区青青蜜月| 国产不卡av在线免费观看| 中文字幕一区电影| 国产精品女人网站| 3344国产精品免费看| 亚洲性xxxx| 国产精品青青在线观看爽香蕉| 大量国产精品视频| 欧美黄色小视频| 日韩激情第一页| 国产精品欧美一区二区| 91精品综合视频| 97精品国产97久久久久久| 永久免费看mv网站入口亚洲| 久久天天躁夜夜躁狠狠躁2022| 国产精品草莓在线免费观看| 欧美激情在线观看视频| 51ⅴ精品国产91久久久久久| 91系列在线观看| 国产女人精品视频| 国内外成人免费激情在线视频| 欧美小视频在线| 日韩一区二区av| 久久国产精彩视频| 日韩欧美视频一区二区三区| 精品呦交小u女在线| 欧美成人午夜激情| 欧美成人午夜剧场免费观看| 中文字幕日韩av综合精品| 国产精品亚洲аv天堂网| 国产精品久久久一区| 97在线观看视频国产| 琪琪第一精品导航| 在线亚洲欧美视频| 欧美午夜精品伦理| 538国产精品一区二区在线| 久久久影视精品| 亚洲欧美色图片| 日韩高清电影好看的电视剧电影| 亚洲人永久免费| 亚洲一区中文字幕在线观看| 啊v视频在线一区二区三区| 久久精品99无色码中文字幕| 欧美成人在线影院| 亚洲国产美女精品久久久久∴| 日韩中文字幕在线视频播放| 欧美高清视频在线| 日本不卡高字幕在线2019| 久久久久久久久电影| 国产精品第8页| 国产精品亚洲片夜色在线| 亚洲欧美在线一区| 国内外成人免费激情在线视频网站| 国产成人在线一区二区| 国产精品精品久久久久久| 日韩精品极品毛片系列视频| 亚洲成人av片在线观看| 亚洲第一精品自拍| 欧美大片大片在线播放| 亚洲高清久久久久久| 啊v视频在线一区二区三区| 国产精品久久久久久五月尺| 欧美专区国产专区| 色婷婷av一区二区三区久久| 国产日本欧美在线观看| 色偷偷91综合久久噜噜| 91欧美视频网站| 亚洲欧美另类中文字幕| 欧美激情亚洲自拍| 国产精品嫩草影院一区二区| 神马久久桃色视频| xx视频.9999.com| 亚洲aa在线观看| 欧美重口另类videos人妖| 欧美激情一级二级| 久久综合伊人77777蜜臀| 在线中文字幕日韩| 欧美激情综合色| 97热精品视频官网| 日韩麻豆第一页| 亚洲一区免费网站| 国产精品电影久久久久电影网| 欧美日韩性视频| 国产亚洲精品美女久久久久| 国产一区深夜福利| 欧美亚洲国产另类| 欧美成人黄色小视频| 欧美性xxxx极品高清hd直播| 成人国产精品一区| 国产91精品久久久| 91麻豆国产精品| 中文字幕日本精品|