編輯:關於Android編程
動畫分為逐幀動畫(Frame)、補間動畫(Tween) 和屬性動畫。
1、逐幀動畫
通常采用XML資源文件進行定義,如下:
android:oneshot 設置是否循環播放動畫,false為循環播放為默認的設置,xml文件定義幀動畫資源,在程序中用一個ImageView就可以顯示該動畫了。
需要指出的是AnimationDrawable代表的動畫默認是不播放的,需要在程序中啟動,調用start() 和 stop() .
子彈爆炸效果實例
import java.lang.reflect.Field; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.AnimationDrawable; import android.media.MediaPlayer; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.FrameLayout; import android.widget.ImageView; public class Blast extends Activity { private MyView myView; private AnimationDrawable anim; private MediaPlayer bomb; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 使用FrameLayout布局管理器,它允許組件自己控制位置 FrameLayout frame = new FrameLayout(this); setContentView(frame); // 設置使用背景 frame.setBackgroundResource(R.drawable.back); // 加載音效 bomb = MediaPlayer.create(this, R.raw.bomb); myView = new MyView(this); // 設置myView用於顯示blast動畫 myView.setBackgroundResource(R.anim.blast); // 設置myView默認為隱藏 myView.setVisibility(View.INVISIBLE); // 獲取動畫對象 anim = (AnimationDrawable) myView.getBackground(); frame.addView(myView); frame.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View source, MotionEvent event) { // 只處理按下事件(避免每次產生兩個動畫效果) if (event.getAction() == MotionEvent.ACTION_DOWN) { // 先停止動畫播放 anim.stop(); float x = event.getX(); float y = event.getY(); // 控制myView的顯示位置 myView.setLocation((int) y - 40, (int) x - 20); myView.setVisibility(View.VISIBLE); // 啟動動畫 anim.start(); // 播放音效 bomb.start(); } return false; } }); } // 定義一個自定義View,該自定義View用於播放“爆炸”效果 class MyView extends ImageView { public MyView(Context context) { super(context); } // 定義一個方法,該方法用於控制MyView的顯示位置 public void setLocation(int top, int left) { this.setFrame(left, top, left + 40, top + 40); } // 重寫該方法,控制如果動畫播放到最後一幀時,隱藏該View protected void onDraw(Canvas canvas) { try { Field field = AnimationDrawable.class.getDeclaredField("mCurFrame"); field.setAccessible(true); // 獲取anim動畫的當前幀 int curFrame = field.getInt(anim); // 如果已經到了最後一幀 if (curFrame == anim.getNumberOfFrames() - 1) { // 讓該View隱藏 setVisibility(View.INVISIBLE); } } catch (Exception e) { } super.onDraw(canvas); } } }blast.xml
Paint與Canvas下面先說下Paint的基本設置函數:paint.setAntiAlias(true);//抗鋸齒功能paint.setColor(Color.RE
本文的目的是要實現左右滑動的指引效果。那麼什麼是指引效果呢?現在的應用為了有更好的用戶體驗,一般會在應用開始顯示一些指引幫助頁面,使用戶能更好的理解應用的功能,甚至是一些
背景新項目的一個界面需要用到九宮格界面,每個Item包含一張圖片,下面是對應的文字描述,給每個Item設置點擊監聽器,當點擊時跳轉到相應的界面。於是想到使用Android
效果:需要知識:1. 二次貝塞爾曲線2. 動畫知識3. 基礎自定義view知識先來解釋下什麼叫阻尼運動阻尼振動是指,由於振動系統受到摩擦和介質阻力或其他能耗而使振幅隨時間