android動畫類
A. 求助一個android動畫怎麼寫,音樂播放狀態的動畫
在Android開發中,使用Animation類可以實現各種動畫效果。例如,你可以為一個ImageView設置動畫,以改變其位置、大小或透明度。具體實現方式是通過Animation對象,然後設置動畫監聽器來監聽動畫的狀態變化。下面是一個簡單的例子:
Animation.setAnimationListener(new AnimationListener() {
/**
* 當動畫開始時
*/
@Override
public void onAnimationStart(Animation animation) {
}
/**
* 當動畫結束時
*/
@Override
public void onAnimationEnd(Animation animation) {
}
});
這種方式可以讓你在動畫開始或結束時執行特定的操作。
然而,幀動畫(FrameAnimation)的情況稍微復雜一些。幀動畫通常用於創建復雜的動畫效果,比如一個簡單的動畫序列,它由一系列的圖片幀組成。幀動畫通過AnimationDrawable類實現,但與普通Animation不同,幀動畫本身並不直接提供監聽器來獲取其播放狀態。這意味著你需要自己實現邏輯來監聽幀動畫的播放過程。
為了監聽幀動畫的播放狀態,你可以通過監聽AnimationDrawable的幀變化事件來實現。具體來說,你需要為AnimationDrawable設置一個FrameAnimationListener,然後在監聽器的方法中處理幀變化事件。例如:
animationDrawable.setCallback(new Callback() {
@Override
public void onDrawableChanged(Drawable drawable) {
if (drawable instanceof AnimationDrawable) {
AnimationDrawable animationDrawable = (AnimationDrawable) drawable;
if (animationDrawable.isRunning()) {
Log.d("Animation", "Frame changed: " + animationDrawable.getCurrentFrame());
}
}
}
});
通過這種方式,你可以在幀動畫播放時監聽到每一幀的變化,並根據需要執行相應的操作。
總結來說,雖然普通Animation提供了監聽器介面來獲取動畫狀態,但幀動畫則需要通過自定義邏輯來監聽其播放過程。理解這兩種動畫類型的差異有助於你在Android開發中更好地利用動畫功能。
B. android中的動畫有哪幾類,它們的特點和區別是什麼
兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現方式可以使視圖組件移動、放大、縮小以及產生透明度的變化;另一種Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。
C. Android 中的動畫有哪幾類,它們的特點和區別是什麼
Android3.0(即API Level11)前Android僅支持2種畫:別Frame Animation(逐幀畫)Tween Animation(補間畫)3.0Android支持種新畫系統稱:Property Animation(屬性畫)
、Frame Animation:(逐幀畫)
理解幀幀播放圖片利用眼視覺殘留原理給我帶畫覺原理GIF圖片、電影播放原理
1.定義逐幀畫比較簡單要使用元素定義所播放幀即
(1) android:oneshot 設置否僅播放
(2) android:drawable 設置每幀圖片
(3) android:ration 設置圖片間切換間隔
2.習慣AnimationDrawable設置ImageView背景
android:background=@anim/frame_anim
我java代碼獲取AnimationDrawable象
AnimationDrawable anim = (AnimationDrawable)imageView.getBackground();
(需要注意AnimationDrawable默認播放調用其start()始播放stop停止播放)
3.面畫文件通xml文件配置喜歡通java代碼創建AnimationDrawable象通addFrame(Drawable frame, int ration)向畫添加幀start()
二、Tween Animation:(補間畫)
補間畫我需指定始、結束關鍵幀變化其幀由系統計算必自幀幀定義
1. Android使用Animation代表抽象畫包括四種類:AlphaAnimation(透明度畫)、ScaleAnimation(縮放畫)、TranslateAnimation(位移畫)、RotateAnimation(透明度畫)Android面允許java創建Animation類象般都採用畫資源文件定義畫界面與邏輯離
(set同定義畫起執行)
2. android:interpolator=@android:anim/linear_interpolator控制畫期間需要補入少幀簡單說控制畫速度些翻譯插值Interpolator幾種實現類:LinearInterpolator、AccelerateInterpolator、、CycleInterpolator、DecelerateInterpolator具體使用參考官API Demo
3. 定義anim文件我通AnimationUtils工具類載入載入功返Animation通ViewstartAnimation(anim)始執行畫
Animation anim = AnimationUtils.loadAnimation(this, R.anim.anim);
//設置畫結束保留結束狀態
anim.setFillAfter(true);
//設置插值效
anim.setInterpolator(interpolator);
//view執行畫
view. startAnimation(anim);
三、Property Animation:(屬性畫)
屬性畫Android 3.0才引進直接更改我象屬性面提Tween Animation更改View繪畫效View真實屬性改變假設用Tween畫Button左邊移右邊論點擊移Button都沒反應點擊移前Button位置才反應Button位置屬性木改變Property Animation則直接改變View象屬性值讓我少做些處理工作提高效率與代碼讀性
(1)ValueAnimator:包含Property Animation畫所核功能畫間始、結束屬性值相應間屬性值計算等應用ValueAnimator兩步驟
1計算屬性值
2根據屬性值執行相應作改變象某屬性
我主第二步需要實現ValueAnimator.onUpdateListener介面介面函數onAnimationUpdate()要改變View象屬性事情該介面do
animation.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//do your work
}
});
(2)ObjectAnimator:繼承自ValueAnimator要指定象及該象屬性屬性值計算完自設置該象相應屬性即完Property Animation全部兩步操作實際應用般都用ObjectAnimator改變某象某屬性用ObjectAnimator定限制要想使用ObjectAnimator應該滿足條件:
1.象應該setter函數:set(駝峰命名)
2面例像ofFloat類工場第參數象名第二屬性名面參數變參數values…參數設置值假定目值屬性值變化范圍前值目值獲前值該象要相應屬性getter:get
3getter其應返值類型應與相應setter參數類型致
ObjectAnimator oa=ObjectAnimator.ofFloat(tv, alpha, 0f, 1f);
oa.setDuration(3000);
oa.start();
滿足面條件我能乖乖使用ValueAnimator創建畫
(3)Animator.AnimatorListener:Animator設置畫監聽需要重寫面四
onAnimationStart()
onAnimationEnd()
onAnimationRepeat()
onAnimationCancel()
我實現AnimatorListenerAdapter處用定義想監聽事件用實現每函數卻定義空函數體:
anim.addListener(new AnimatorListenerAdapter() {
public void on AnimationEnd(Animator animation){
//do your work
}
});
(4)AnimationSet:組合畫共同工作
AnimatorSet bouncer = new AnimatorSet();
bouncer.play(anim1).before(anim2);
bouncer.play(anim2).with(anim3);
bouncer.play(anim2).with(anim4)
bouncer.play(anim5).after(amin2);
animatorSet.start();
面代碼意思: 首先播放anim1;同播放anim2,anim3,anim4;播放anim5
(5)TimeInterplator:與Tweeninterpolator類似幾種
AccelerateInterpolator 加速始慢間加速
DecelerateInterpolator 減速始快減速
先加速減速始結束慢間加速
AnticipateInterpolator 反向 先向相反向改變段再加速播放
反向加彈先向相反向改變再加速播放超目值緩慢移至目值
BounceInterpolator 跳躍快目值值跳躍目值100面值能依8577708090100
CycleIinterpolator 循環畫循環定數值改變弦函數:Math.sin(2 * mCycles * Math.PI * input)
LinearInterpolator 線性線性均勻改變
OvershottInterpolator 彈超目值緩慢改變目值
TimeInterpolator 介面允許自定義interpolator幾都實現介面
(6)Keyframes:讓我定義除始結束外關鍵幀KeyFrame抽象類要通ofInt(),ofFloat(),ofObject()獲適KeyFrame通PropertyValuesHolder.ofKeyframe獲PropertyValuesHolder象:
Keyframe kf0 = Keyframe.ofInt(0, 400);
Keyframe kf1 = Keyframe.ofInt(0.25f, 200);
Keyframe kf2 = Keyframe.ofInt(0.5f, 400);
Keyframe kf4 = Keyframe.ofInt(0.75f, 100);
Keyframe kf3 = Keyframe.ofInt(1f, 500);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(width, kf0, kf1, kf2, kf4, kf3);
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(btn, pvhRotation);
述代碼意思:設置btn象width屬性值使其:始 Width=400畫始1/4 Width=200畫始1/2 Width=400畫始3/4 Width=100畫結束 Width=500
(7)ViewPropertyAnimator:View同改變種屬性非推薦用種該類屬性畫進行優化合並些invalidate()減少刷新視圖且使用起非簡便要求API LEVEL 12即Android 3.1僅需要行代碼即完水平、豎直移
myView.animate().translationX(50f). translationY(100f);
(8)需要改變些屬性:
translationX,translationY: View相於原始位置偏移量
rotation,rotationX,rotationY: 旋轉rotation用於2D旋轉角度3D用兩
scaleX,scaleY: 縮放比
x,y: View終坐標Viewlefttop位置加translationXtranslationY
alpha: 透明度
四、自總結三種畫優缺點:
(1)Frame Animation(幀畫)主要用於播放幀幀准備圖片類似GIF圖片優點使用簡單便、缺點需要事先准備每幀圖片;
(2)Tween Animation(補間畫)僅需定義始與結束關鍵幀變化間幀由系統補優點用准備每幀缺點改變象繪制沒改變View本身屬性改變按鈕位置需要點擊原按鈕所位置才效
(3)Property Animation(屬性畫)3.0推畫優點使用簡單、降低實現復雜度、直接更改象屬性、幾乎適用於任何象僅非View類缺點需要3.0API支持限制較目前外源庫提供低版本支持
D. android中的動畫有哪幾類,它們的特點和區別是什麼
Android中的常用動畫有三種:
1、View Animation(Tween Animation 補間動畫)
動畫的對象除了傳統的View對象,還可以是Object對象,動畫之後,Object對象的屬性值被實實在在的改變了。Propertyanimation能夠通過改變View對象的實際屬性來實現View動畫。任何時候View屬性的改變,View能自動調用invalidate()來試試刷新。