編輯:關於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
Android 自定義View總結
Paint與Canvas下面先說下Paint的基本設置函數:paint.setAntiAlias(true);//抗鋸齒功能paint.setColor(Color.RE
如何在Android中實現左右滑動的指引效果
本文的目的是要實現左右滑動的指引效果。那麼什麼是指引效果呢?現在的應用為了有更好的用戶體驗,一般會在應用開始顯示一些指引幫助頁面,使用戶能更好的理解應用的功能,甚至是一些
Android GridViewd 簡單代碼實現
背景新項目的一個界面需要用到九宮格界面,每個Item包含一張圖片,下面是對應的文字描述,給每個Item設置點擊監聽器,當點擊時跳轉到相應的界面。於是想到使用Android
Android自定義view實現阻尼效果的加載動畫
效果:需要知識:1. 二次貝塞爾曲線2. 動畫知識3. 基礎自定義view知識先來解釋下什麼叫阻尼運動阻尼振動是指,由於振動系統受到摩擦和介質阻力或其他能耗而使振幅隨時間