最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年09月25日 08:26:31   作者:cj_286  
安卓的三種動(dòng)畫(huà),幀動(dòng)畫(huà),補(bǔ)間動(dòng)畫(huà),屬性動(dòng)畫(huà),大家了解多少,知道如何使用嗎?本文就為大家簡(jiǎn)單介紹Android幀動(dòng)畫(huà)、補(bǔ)間動(dòng)畫(huà)、屬性動(dòng)畫(huà)的使用方法,需要的朋友可以參考下

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

幀動(dòng)畫(huà):不是針對(duì)View做出一些形狀上的變化,而是用于播放一張張的圖片,例如一些開(kāi)機(jī)動(dòng)畫(huà),類(lèi)似于電影播放,使用的是AnimationDrawable來(lái)播放幀動(dòng)畫(huà)
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)畫(huà)(View動(dòng)畫(huà)):如果View只做一些動(dòng)畫(huà),并不對(duì)View做點(diǎn)擊或觸控的一些操作,可以使用補(bǔ)間動(dòng)畫(huà),因?yàn)閂iew動(dòng)畫(huà),并不會(huì)改變View的位置,只是做一些渲染。View動(dòng)畫(huà)的四種變換效果對(duì)應(yīng)著Animation的四個(gè)子類(lèi):TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation.

// 以view中心為縮放點(diǎn),由初始狀態(tài)縮小到看不間在返回到看見(jiàn) 
 ScaleAnimation animation = new ScaleAnimation( 
  1.0f, 0.0f,//一點(diǎn)點(diǎn)變小直到看不見(jià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)畫(huà):API11新特性,如果對(duì)View不僅做一些動(dòng)畫(huà)操作,也對(duì)View做一些點(diǎn)擊觸摸的操作,可以使用屬性動(dòng)畫(huà),因?yàn)閷傩詣?dòng)畫(huà)會(huì)改變View的位置。屬性動(dòng)畫(huà)類(lèi)有ValueAnimator、ObjectAnimator、AnimatorSet。

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

ValueAnimator值動(dòng)畫(huà),它并不是用于對(duì)View做一些動(dòng)畫(huà),它僅僅是用于兩個(gè)值之間的一個(gè)過(guò)度的動(dòng)畫(huà)(按照時(shí)間將兩個(gè)差值平分,然后根據(jù)時(shí)間來(lái)一點(diǎn)點(diǎn)的往上加),系統(tǒng)提供了一些ValueAnimator.ofInt()、ValueAnimator.ofFloat()用于整型和浮點(diǎn)型的兩只之間的過(guò)度動(dòng)畫(huà),如果兩個(gè)值是自己自定義的類(lèi)型該怎么辦呢?安卓提供了一個(gè)ValueAnimator.ofObject()方法,其中一個(gè)參數(shù)是TypeEvaluator類(lèi)型(類(lèi)型估算器),TypeEvaluator是一個(gè)接口,給開(kāi)發(fā)者的一個(gè)擴(kuò)展,接口中有一個(gè)public Object evaluate(float fraction, Object startValue, Object endValue) 方法,該方法會(huì)在ValueAnimator動(dòng)畫(huà)期間不斷的調(diào)用,fraction是0-1之間的變化率,startValue是(自定義類(lèi)型的)開(kāi)始值,endValue是(自定義類(lèi)型的)結(jié)束值,返回類(lèi)型就是自定義的類(lèi)型,可以根據(jù)自己的需求來(lái)自行計(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)畫(huà),它是針對(duì)view來(lái)做一些屬性上值得變化,它不僅在值上有一個(gè)過(guò)度的變化,而且還會(huì)將變化的值設(shè)置到所要改變的屬性上,讓其產(chǎn)生動(dòng)畫(huà)的效果
ObjectAnimator.ofInt(view,"translationX",10,20).setDuration(100).start(); 參數(shù)view是要產(chǎn)生動(dòng)畫(huà)的view,"translationX"屬性,后面的參數(shù)是變化的區(qū)間
ObjectAnimator做屬性動(dòng)畫(huà)的時(shí)候,并不會(huì)改變view的left,top,right,bottom值,它改變的只是translationX和translationY的值,這些參數(shù)值的關(guān)系是 x = left + translationX  , y = top + translationY。在平移過(guò)程中,只會(huì)改變x 和translationX ,y和translatioinY的值。其中x和y是View左上角的坐標(biāo)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

景泰县| 友谊县| 包头市| 元朗区| 永嘉县| 开封市| 沂源县| 拉萨市| 凤山县| 淮滨县| 林口县| 股票| 榆林市| 安塞县| 通海县| 江安县| 广东省| 瑞安市| 佛教| 洛隆县| 延吉市| 互助| 吉首市| 阳高县| 汶川县| 屯门区| 安溪县| 重庆市| 密山市| 兴文县| 峨山| 辽源市| 新干县| 大竹县| 娄烦县| 葫芦岛市| 普兰店市| 武鸣县| 陇南市| 托克逊县| 湾仔区|