He creado una vista personalizada en Android para mostrar la pelota en la pantalla. Ahora lo que quiero es que cuando toque esa bola, explote en cuatro partes y cada parte se mueva en cuatro direcciones diferentes, es decir, arriba, abajo, izquierda, derecha. Sé que tengo que configurar el oyente táctil para detectar el toque en la pelota, pero ¿cómo crear un efecto de explosión? Este problema ahora se resuelve. Estoy mostrando varias bolas en la pantalla para que el usuario pueda hacer clic y explotar.Problema de clic de objeto personalizado en android
Aquí está mi vista personalizada:
public class BallView extends View {
private float x;
private float y;
private final int r;
public BallView(Context context, float x1, float y1, int r) {
super(context);
this.x = x1;
this.y = y1;
this.r = r;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(x, y, r, mPaint);
}
}
SmallBall con propiedades similares, excepto uno que es un método de dirección y explotar para moverlo en la dirección y animación de la bandera para detenerlo en movimiento.
private final int direction;
private boolean anim;
public void explode() {
// plus or minus x/y based on direction and stop animation if anim flag is false
invalidate();
}
Mi xml distribución es la siguiente:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/main_view"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FF66FF33" />
estoy añadiendo BALLView y SmallBall a la clase de actividad como sigue:
final FrameLayout mainFrameLayout = (FrameLayout) findViewById(R.id.main_frame_layout);
SmallBall[] smallBalls = new SmallBall[4];
smallBalls[0] = new SmallBall(getApplicationContext(), 105, 100, 10, 1, false);
smallBalls[0].setVisibility(View.GONE);
mainFrameLayout .addView(smallBalls[0]);
// create and add other 3 balls with different directions.
BallView ball = new BallView(getApplicationContext(), 100, 100, 25, smallBalls);
listener = new MyListener(ball);
ball.setOnClickListener(listener);
mainFrameLayout.addView(ball);
estoy añadiendo BALLView múltiple y su relativa Arreglo de SmallBall en diferentes posiciones. Ahora lo que sucede, no importa dónde haga clic en la pantalla, BallView comienza a explotar por última vez. Después de esa segunda, y así sucesivamente. Así que aquí están 2 números:
- ¿Por qué llama al evento OnClick/onTouch sin importar dónde haga clic en la pantalla? Solo debería llamar al evento listener cuando hago clic en un BallView particular.
- Y en segundo lugar, ¿por qué BallView comienza a explotar de forma inversa a cómo se agregan al diseño?
Mi clase de escucha:
public void onClick(View v) {
BallView ballView = (BallView) v;
ballView.setVisibility(View.GONE);
//get small balls associated with this ball.
//loop through small ball and call their explode method.
}
he recortado código debido a la limitación de caracteres en cuestión.
¿Qué problema tienes al codificar el efecto de explosión? ¿Quieres la animación del movimiento de las piezas o los gráficos de explosión? Sería mejor que pudieras proporcionar una imagen o algo que quisieras lograr. – noob
@Creator: Lo que quiero es que cuando alguien haga clic en cualquier bola, explote en cuatro bolas pequeñas y cada pared se mueva en una de las cuatro direcciones. No estoy seguro sobre qué usar para esto ya que soy nuevo en Android. Puede ser una animación de piezas explosionadas será una buena opción. –
Verifique mi respuesta – noob