動畫的加載方式

幀動畫動態(tài)加載

private ImageView show_iv;

private AnimationDrawable drawable;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

show_iv = (ImageView) findViewById(R.id.show_iv);

// 資源文件加載的方式 ?一定要設(shè)置該資源為 ImageView的backGround ? 不能是 ?src

// drawable = (AnimationDrawable) show_iv.getBackground();

// // true 只播放一次 否則 重復(fù)播放 (默認(rèn))

// drawable.setOneShot(false);

drawable = new AnimationDrawable();

drawable.addFrame(getResources().getDrawable(R.drawable.girl_1), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_2), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_3), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_4), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_5), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_6), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_7), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_8), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_9), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_10), 200);

drawable.addFrame(getResources().getDrawable(R.drawable.girl_11), 200);

show_iv.setImageDrawable(drawable);

drawable.setOneShot(true);

}

public void onClick(View view) {

if (drawable.isRunning()) {

drawable.stop();

} else {

drawable.start();

}

}

}

補(bǔ)間動畫

/**

* 補(bǔ)間動畫 TwennAnimation 補(bǔ)充開始與結(jié)束之間的動作 支持 位移, 旋轉(zhuǎn) ,縮放 透明度的改變 這四種動畫 并且 只支持 View 來執(zhí)行

* 動畫的資源可以使用xml資源文件的方式 定義 也可以使用Java代碼的方式 定義

*

*

* xml資源放在 res文件夾下的 anim 文件夾中

* @author alice

*

*/

public class MainActivity extends Activity {

private ImageView show_iv;

// 每次加載 res 資源文件都是耗費(fèi)資源的一個過程 因此 先將資源加載出來 每次啟動動畫的時候 都直接執(zhí)行動畫即可 不需要再次去加載資源

private Animation translate;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

show_iv = (ImageView) findViewById(R.id.show_iv);

show_iv.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(MainActivity.this, "這里是View 存在的地方", Toast.LENGTH_SHORT).show();

}

});

}

public void onClick(View view) {

switch (view.getId()) {

case R.id.translate_bt:

// 位移動畫

Animation tAnimation = new TranslateAnimation(0, 100, 0, 300);

tAnimation.setDuration(3000);

tAnimation.setFillAfter(true);

//插值器 ?減速插值器

tAnimation.setInterpolator(new DecelerateInterpolator());

show_iv.startAnimation(tAnimation);

break;

case R.id.alpha_bt:

// 透明度

Animation alpha = new AlphaAnimation(0.0f, 1.0f);

alpha.setDuration(3000);

alpha.setFillAfter(true);

show_iv.startAnimation(alpha);

break;

case R.id.rotate_bt:

// 旋轉(zhuǎn)

Animation rotate = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,

0.5f);

rotate.setDuration(3000);

rotate.setFillAfter(true);

show_iv.startAnimation(rotate);

break;

case R.id.scale_bt:

// 縮放

Animation scale = new ScaleAnimation(1, 0.5f, 1, 1, 0, 0.5f);

scale.setDuration(3000);

scale.setFillAfter(true);

show_iv.startAnimation(scale);

break;

case R.id.set_bt:

// 集合

setAnimationList();

break;

default:

break;

}

}

private void setAnimationList() {

// false 使用集合動畫 自己的 插值器

// true 則使用 set 默認(rèn)的 插值器

AnimationSet set = new AnimationSet(false);

//位移動畫

Animation tAnimation = new TranslateAnimation(0, 100, 0, 200);

tAnimation.setDuration(3000);

//透明度動畫

Animation alpha = new AlphaAnimation(0.0f, 1.0f);

alpha.setDuration(3000);

//添加動畫

set.addAnimation(tAnimation);

set.addAnimation(alpha);

//開始動畫

show_iv.startAnimation(set);

}

屬性動畫

/**

* 屬性動畫

位移 translationX translationY

* 旋轉(zhuǎn) rotation rotationX rotationY

* 縮放 scaleX scaleY

* 透明度 alpha

*

* ObjectAnimator

* 構(gòu)造方法:

* ObjectAnimator.OfFloat()

* 第一個參數(shù):執(zhí)行該動畫的對象

* 第二個參數(shù):動畫的屬性名稱

* 第三個參數(shù):可變參數(shù),執(zhí)行的動畫的值

*

* 集合

* AnimatorSet

* 邏輯不要出錯 ?不用使用重復(fù)的對象 并且 ?每一個關(guān)系都是相對于 第一個動畫的

* set.Play().with().before().after()

*

*用集合將動畫記錄下來 之后 ?有序或同步執(zhí)行

* set.playTogether(List)

* set.playSequentially(List)

*

*動畫監(jiān)聽

* animator.setListener(){

* start

* end

* repeat

* cancle

* }

*

*動畫延遲

* startDelayed

*

*

* 加載動畫中的xml資源:

* 1.在res 文件夾下創(chuàng)建文件夾名字為 ? animator的文件夾

* 在 該文件夾下添加資源

*

* AnimatorInflate.loadAnimator(Context,resId);

* animator.setTartget(Object)

*

* ValueAnimator ?OnjectAnimator的 父類

* 也可以實(shí)現(xiàn)動畫 只是比較麻煩

*

*

* @author alice

*

*/

public class MainActivity extends Activity {

private ImageView show_iv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

show_iv = (ImageView) findViewById(R.id.show_iv);

show_iv.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(MainActivity.this, "我就在這里!", Toast.LENGTH_SHORT).show();

}

});

}

@TargetApi(Build.VERSION_CODES.HONEYCOMB) @SuppressLint("NewApi")

public void onClick(View view) {

switch (view.getId()) {

case R.id.translate_bt:

// 位移動畫

/*

* 第一個參數(shù): 執(zhí)行該動畫的 對象 第二個參數(shù): 動畫的屬性名稱 第三個參數(shù): 可變參數(shù) 執(zhí)行動畫的 值

*

*/

ObjectAnimator translateAnimator = ObjectAnimator.ofFloat(show_iv, "translationX", 0, 200, 100, 50);

translateAnimator.setDuration(3000);

translateAnimator.start();

break;

case R.id.rotate_bt:

// 旋轉(zhuǎn)

ObjectAnimator rotationAnimator = ObjectAnimator.ofFloat(show_iv, "rotationY", 0, 360, 720);

rotationAnimator.setDuration(3 * 1000);

rotationAnimator.start();

break;

case R.id.scale_bt:

//縮放

ObjectAnimator scaleAnimator = ObjectAnimator.ofFloat(show_iv, "scaleX", 1, 4, 2);

scaleAnimator.setDuration(3000);

scaleAnimator.setRepeatCount(3);

// 動畫延時

scaleAnimator.setStartDelay(3000);

scaleAnimator.start();

// 動畫的監(jiān)聽

scaleAnimator.addListener(new AnimatorListener() {

@Override

public void onAnimationStart(Animator animation) {

// 動畫開始的時候

Log.d("TAG", "onAnimationStart");

}

@Override

public void onAnimationRepeat(Animator animation) {

// 動畫重復(fù)的時候

Log.d("TAG", "onAnimationRepeat");

}

@Override

public void onAnimationEnd(Animator animation) {

// 動畫 結(jié)束的時候

Log.d("TAG", "onAnimationEnd");

}

@Override

public void onAnimationCancel(Animator animation) {

// 動畫取消的時候

}

});

break;

case R.id.alpha_bt:

//透明

ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(show_iv, "alpha", 0, 1);

alphaAnimator.setDuration(3000);

alphaAnimator.start();

break;

case R.id.set_bt:

// 集合

AnimatorSet set = new AnimatorSet();

ObjectAnimator translateX = ObjectAnimator.ofFloat(show_iv, "translationX", 0, 200, 200, 0, 0);

translateX.setDuration(3000);

ObjectAnimator translateY = ObjectAnimator.ofFloat(show_iv, "translationY", 0, 0, 200, 200, 0);

translateY.setDuration(3000);

// 第二種表達(dá)方式

List list = new ArrayList();

list.add(translateY);

list.add(translateX);

// 依次執(zhí)行

// set.playSequentially(list);

// 同步執(zhí)行

// set.playTogether(list);

// 后面的 邏輯思維一定要正確 并且 同一個動畫只能參與一次 后面的所有添加的 邏輯 都是相對于 第一個 play()中的動畫

set.play(translateX).with(translateY).after(translateY);

set.start();

break;

case R.id.value_bt:

// ValueAnimator 是 ObjectAnimator的 父類

// 實(shí)現(xiàn)起來比較麻煩

ValueAnimator animator = ValueAnimator.ofFloat(0, 200);

animator.setDuration(3000);

animator.addUpdateListener(new AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

float value = (Float) animation.getAnimatedValue();

show_iv.setTranslationX(value);

}

});

animator.start();

break;

default:

break;

}

}

}

這是我的動畫源碼,是動態(tài)加載,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 補(bǔ)間動畫(Tween Animation) 補(bǔ)間動畫有以下四種 Alpha透明度動畫 Scale尺寸縮放動畫 Tr...
    _執(zhí)_念__閱讀 465評論 0 1
  • 曾經(jīng)我們一度的使用動畫,不管是利用xml還是代碼實(shí)現(xiàn),但是你深入思考過嗎(肯定有大牛早已知曉一切,勿噴,人都要有愛...
    laer_L閱讀 1,060評論 0 10
  • 前言 在學(xué)習(xí)了Android的動畫之后,簡單總結(jié)了一下,看完這篇文章就可以自己動手寫一個簡單的動畫了 正文 An...
    墨月城汐閱讀 1,573評論 0 5
  • 回首翻看前歲事,兒時碎片盡毫梢。 時間存儲新除舊,難舍之疼不可消。 留下辛酸常憶憶,記得別忘搭誰橋。 無聊樂事隨塵...
    徐一村閱讀 316評論 0 3
  • 網(wǎng)上報了微信課,跟七七學(xué)畫瑜伽小人兒,今天只報站立體式:正面、側(cè)面、前屈。先一個田字形畫頭部,延中線延伸直線,與頭...
    yogaying閱讀 788評論 0 0

友情鏈接更多精彩內(nèi)容