A TranslateAnimation class is useful to code the movement animation of shape like a circle and a square, etc.
Viewでの移動アニメーション
移動を実現するために次のことを行いました。
(1) 移動元と移動先の設定
TranslateAnimationをインスタンス化する際に移動元と移動先を設定します。コンストラクタの引数は次のとおりです。
第一引数:移動元x座標
第二引数:移動先x座標
第三引数:移動元y座標
第四引数:移動先y座標
(2) 移動完了までの時間設定
移動アニメーションが開始して終了するまでの時間をsetDurationメソッドで指定します。引数にはlong型でミリ秒単位の時間を設定します。
(3) 移動アニメーションの開始
ViewクラスのstartAnimationメソッドに、TranslateAnimationオブジェクトを引数として渡すと、移動アニメーションが開始されます。
プログラム
タップしたら日の丸が画面の左側へ移動してフレームアウトするプログラムを作りました。Viewとして、背景を描画する「BackgroundView.java」と日の丸の移動アニメーションを実現する「AnimationView.java」を用意し、それら2つのViewを「Beta.java」がFrameLayoutを利用して重ねあわせています。
/LayoutTest/src/org/example/layout/Beta.java
package org.example.layout;
import android.app.Activity;
import android.os.Bundle;
import android.widget.FrameLayout;
public class Beta extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout frameLayout = new FrameLayout(this);
setContentView(frameLayout);
frameLayout.addView(new BackgroundView(this));
frameLayout.addView(new AnimationView(this));
}
}
/LayoutTest/src/org/example/layout/BackgroundView.java
package org.example.layout;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
public class BackgroundView extends View{
private int width;
private int height;
Paint background;
public BackgroundView(Context context) {
super(context);
background = new Paint();
background.setColor(0xffffffff);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRect(0, 0, width, height, background);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
width = w;
height = h;
}
}
/LayoutTest/src/org/example/layout/AnimationView.java
package org.example.layout;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.TranslateAnimation;
public class AnimationView extends View{
private int width;
private int circleWidth;
private int circleHeight;
Paint circlePaint;
public AnimationView(Context context) {
super(context);
circlePaint = new Paint();
circlePaint.setColor(0xffff0000);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawCircle(circleWidth, circleHeight, 90, circlePaint);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
width = w;
circleWidth = w / 2;
circleHeight = h / 2;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP:
TranslateAnimation translate = new TranslateAnimation(0, -width, 0, 0);
translate.setDuration(1000);
startAnimation(translate);
break;
}
return true;
}
}
実行結果
プログラムを実行すると、最初は赤丸が画面中央に描かれますが、タップをするとすごい勢いで左側へと移動し、そのまま赤丸がフレームアウトします。アニメーションが終わると、また赤丸が画面中央に描かれます。
アニメーションってすばらしい!

0 件のコメント:
コメントを投稿