動畫的加載方式

幀動畫動態加載

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);

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

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

// // true 只播放一次 否則 重復播放 (默認)

// 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();

}

}

}

補間動畫

/**

* 補間動畫 TwennAnimation 補充開始與結束之間的動作 支持 位移, 旋轉 ,縮放 透明度的改變 這四種動畫 并且 只支持 View 來執行

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

*

*

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

* @author alice

*

*/

public class MainActivity extends Activity {

private ImageView show_iv;

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

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:

// 旋轉

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 默認的 插值器

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

* 旋轉 rotation rotationX rotationY

* 縮放 scaleX scaleY

* 透明度 alpha

*

* ObjectAnimator

* 構造方法:

* ObjectAnimator.OfFloat()

* 第一個參數:執行該動畫的對象

* 第二個參數:動畫的屬性名稱

* 第三個參數:可變參數,執行的動畫的值

*

* 集合

* AnimatorSet

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

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

*

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

* set.playTogether(List)

* set.playSequentially(List)

*

*動畫監聽

* animator.setListener(){

* start

* end

* repeat

* cancle

* }

*

*動畫延遲

* startDelayed

*

*

* 加載動畫中的xml資源:

* 1.在res 文件夾下創建文件夾名字為 ? animator的文件夾

* 在 該文件夾下添加資源

*

* AnimatorInflate.loadAnimator(Context,resId);

* animator.setTartget(Object)

*

* ValueAnimator ?OnjectAnimator的 父類

* 也可以實現動畫 只是比較麻煩

*

*

* @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:

// 位移動畫

/*

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

*

*/

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

translateAnimator.setDuration(3000);

translateAnimator.start();

break;

case R.id.rotate_bt:

// 旋轉

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();

// 動畫的監聽

scaleAnimator.addListener(new AnimatorListener() {

@Override

public void onAnimationStart(Animator animation) {

// 動畫開始的時候

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

}

@Override

public void onAnimationRepeat(Animator animation) {

// 動畫重復的時候

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

}

@Override

public void onAnimationEnd(Animator animation) {

// 動畫 結束的時候

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);

// 第二種表達方式

List list = new ArrayList();

list.add(translateY);

list.add(translateX);

// 依次執行

// set.playSequentially(list);

// 同步執行

// set.playTogether(list);

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

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

set.start();

break;

case R.id.value_bt:

// ValueAnimator 是 ObjectAnimator的 父類

// 實現起來比較麻煩

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;

}

}

}

這是我的動畫源碼,是動態加載,

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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