国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android幀動(dòng)畫、補(bǔ)間動(dòng)畫、屬性動(dòng)畫用法詳解

2019-12-12 04:47:37
字體:
供稿:網(wǎng)友

在安卓開發(fā)中,經(jīng)常會(huì)使用到一些動(dòng)畫,那么在開發(fā)中,如何使用這些動(dòng)畫呢?

幀動(dòng)畫:不是針對(duì)View做出一些形狀上的變化,而是用于播放一張張的圖片,例如一些開機(jī)動(dòng)畫,類似于電影播放,使用的是AnimationDrawable來播放幀動(dòng)畫
res/drawable 

<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"    android:oneshot="true"   >      <item android:drawable="@drawable/g1" android:duration="200"></item>   <item android:drawable="@drawable/g2" android:duration="200"></item>   <item android:drawable="@drawable/g3" android:duration="200"></item>   <item android:drawable="@drawable/g4" android:duration="200"></item>   <item android:drawable="@drawable/g5" android:duration="200"></item>  </animation-list> 
ImageView iv = (ImageView) findViewById(R.id.iv); iv.setBackgroundDrawable(getResources().getDrawable(R.drawable.frame_anim));      AnimationDrawable animationDrawable = (AnimationDrawable) iv.getBackground();      //設(shè)置是否只執(zhí)行一次 //animationDrawable.setOneShot(false);      animationDrawable.start(); 

補(bǔ)間動(dòng)畫(View動(dòng)畫):如果View只做一些動(dòng)畫,并不對(duì)View做點(diǎn)擊或觸控的一些操作,可以使用補(bǔ)間動(dòng)畫,因?yàn)閂iew動(dòng)畫,并不會(huì)改變View的位置,只是做一些渲染。View動(dòng)畫的四種變換效果對(duì)應(yīng)著Animation的四個(gè)子類:TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation.

// 以view中心為縮放點(diǎn),由初始狀態(tài)縮小到看不間在返回到看見     ScaleAnimation animation = new ScaleAnimation(         1.0f, 0.0f,//一點(diǎn)點(diǎn)變小直到看不見為止         1.0f, 0.0f,         Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f//中間縮放     );     animation.setDuration(BUBBLE_ENTER_CENTER_SCALE_TIME);     animation.setRepeatMode(Animation.REVERSE);     animation.setRepeatCount(1);     animation.setAnimationListener(new Animation.AnimationListener() {       @Override       public void onAnimationStart(Animation animation) {       }        @Override       public void onAnimationEnd(Animation animation) {          homingBubbleView(true,position,view, current, endRatioFrame);       }        @Override       public void onAnimationRepeat(Animation animation) {       }     });     view.startAnimation(animation); 

屬性動(dòng)畫:API11新特性,如果對(duì)View不僅做一些動(dòng)畫操作,也對(duì)View做一些點(diǎn)擊觸摸的操作,可以使用屬性動(dòng)畫,因?yàn)閷傩詣?dòng)畫會(huì)改變View的位置。屬性動(dòng)畫類有ValueAnimator、ObjectAnimator、AnimatorSet。

下面就來介紹一下兩個(gè)屬性動(dòng)畫

ValueAnimator值動(dòng)畫,它并不是用于對(duì)View做一些動(dòng)畫,它僅僅是用于兩個(gè)值之間的一個(gè)過度的動(dòng)畫(按照時(shí)間將兩個(gè)差值平分,然后根據(jù)時(shí)間來一點(diǎn)點(diǎn)的往上加),系統(tǒng)提供了一些ValueAnimator.ofInt()、ValueAnimator.ofFloat()用于整型和浮點(diǎn)型的兩只之間的過度動(dòng)畫,如果兩個(gè)值是自己自定義的類型該怎么辦呢?安卓提供了一個(gè)ValueAnimator.ofObject()方法,其中一個(gè)參數(shù)是TypeEvaluator類型(類型估算器),TypeEvaluator是一個(gè)接口,給開發(fā)者的一個(gè)擴(kuò)展,接口中有一個(gè)public Object evaluate(float fraction, Object startValue, Object endValue) 方法,該方法會(huì)在ValueAnimator動(dòng)畫期間不斷的調(diào)用,fraction是0-1之間的變化率,startValue是(自定義類型的)開始值,endValue是(自定義類型的)結(jié)束值,返回類型就是自定義的類型,可以根據(jù)自己的需求來自行計(jì)算期間的值該如何變化(如可以是運(yùn)行軌跡)

public class FloatEvaluator implements TypeEvaluator {    public Object evaluate(float fraction, Object startValue, Object endValue) {      float startFloat = ((Number) startValue).floatValue();      return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);    }    

使用

ValueAnimator mAnimatorEnetr = ValueAnimator.ofObject(new FloatEvaluator(getContext()), 0,10);       mAnimatorEnetr.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {         @Override         public void onAnimationUpdate(ValueAnimator animation) {           (Float) animation.getAnimatedValue();//這里就是返回不斷變化的值                    }       });       mAnimatorEnetr.setDuration(1000);       mAnimatorEnetr.addListener(new Animator.AnimatorListener() {         @Override         public void onAnimationStart(Animator animation) {          }          @Override         public void onAnimationEnd(Animator animation) {                    }          @Override         public void onAnimationCancel(Animator animation) {          }          @Override         public void onAnimationRepeat(Animator animation) {          }       });       mAnimatorEnetr.start(); 

ObjectAnimator動(dòng)畫,它是針對(duì)view來做一些屬性上值得變化,它不僅在值上有一個(gè)過度的變化,而且還會(huì)將變化的值設(shè)置到所要改變的屬性上,讓其產(chǎn)生動(dòng)畫的效果
ObjectAnimator.ofInt(view,"translationX",10,20).setDuration(100).start(); 參數(shù)view是要產(chǎn)生動(dòng)畫的view,"translationX"屬性,后面的參數(shù)是變化的區(qū)間
ObjectAnimator做屬性動(dòng)畫的時(shí)候,并不會(huì)改變view的left,top,right,bottom值,它改變的只是translationX和translationY的值,這些參數(shù)值的關(guān)系是 x = left + translationX  , y = top + translationY。在平移過程中,只會(huì)改變x 和translationX ,y和translatioinY的值。其中x和y是View左上角的坐標(biāo)。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 栾川县| 六盘水市| 邢台市| 隆德县| 邓州市| 大冶市| 梨树县| 达孜县| 阳城县| 松阳县| 郧西县| 镇安县| 旌德县| 常山县| 贵港市| 会东县| 罗田县| 邹城市| 噶尔县| 岫岩| 克什克腾旗| 贵溪市| 漳浦县| 凤山市| 甘洛县| 鹰潭市| 丰镇市| 韶关市| 浪卡子县| 海门市| 宁乡县| 大竹县| 沁源县| 南京市| 东辽县| 万荣县| 云安县| 东方市| 平安县| 望城县| 禹城市|