мои коды:
package net.tq5.bubbleexplosion;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.widget.ImageView;
public class BubbleExplosionActivity extends Activity {
public static final String TAG = "BubbleExplosionActivity";
/** Called when the activity is first created. */
private FrameLayout parent;
private ExplosionView customView;
private AnimationDrawable exal;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set no title;
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// Create a FrameLayout and set the background;
parent = new FrameLayout(this);
parent.setBackgroundResource(R.drawable.bg);
customView = new ExplosionView(this);
customView.setVisibility(View.INVISIBLE);
customView.setBackgroundResource(R.anim.explosion);
exal = (AnimationDrawable) customView.getBackground();
parent.addView(customView);
parent.setOnTouchListener(new LayoutListener());
setContentView(parent);
}
class ExplosionView extends ImageView {
public ExplosionView(Context context) {
super(context);
}
// handle the location of the Explosion;
public void setLocation(int left, int top) {
this.setFrame(left, top, left + 40, top + 40);
}
}
class LayoutListener implements OnTouchListener {
@Override
public boolean onTouch(View view, MotionEvent event) {
// first you stop the animation
// you can always restart it;
customView.setVisibility(View.INVISIBLE);
if (exal.isRunning())
return false;
// exal.stop();
float x = event.getX();
float y = event.getY();
Log.i(TAG, "on Touch");
customView.setLocation((int) x - 20, (int) y - 20);
customView.setVisibility(View.VISIBLE);
exal.start();
return false;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/bubble0" android:duration="500" />
<item android:drawable="@drawable/explode1" android:duration="500" />
<item android:drawable="@drawable/explode2" android:duration="500" />
<item android:drawable="@drawable/explode3" android:duration="500" />
<item android:drawable="@drawable/explode4" android:duration="500" />
<item android:drawable="@drawable/explode5" android:duration="500" />
</animation-list>
изображение bubble0 всегда показывают два раза; Кажется, что анимация была запущена два раза, но я попытался это сделать, чтобы метод start () был запущен только один раз, но анимация будет выполняться дважды:
public class BubbleExplosionActivity extends Activity {
public static final String TAG = "BubbleExplosionActivity";
/** Called when the activity is first created. */
private FrameLayout parent;
private ExplosionView customView;
private AnimationDrawable exal;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set no title;
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// Create a FrameLayout and set the background;
parent = new FrameLayout(this);
parent.setBackgroundResource(R.drawable.bg);
customView = new ExplosionView(this);
customView.setVisibility(View.INVISIBLE);
customView.setBackgroundResource(R.anim.explosion);
exal = (AnimationDrawable) customView.getBackground();
parent.addView(customView);
parent.setOnTouchListener(new LayoutListener());
setContentView(parent);
(new Handler()).postDelayed(new Runnable() {
@Override
public void run() {
customView.setLocation((int) 100 - 20, (int) 100 - 20);
customView.setVisibility(View.VISIBLE);
exal.start();
}
}, 3000);
}
}
Помощь!