Проблема с щелчком пользовательского объекта в Android

Я создал пользовательский вид в Android для отображения мяча на экране. Теперь я хочу, чтобы когда я касался этого шара, он должен взорваться на четыре части, и каждая часть должна двигаться в разных четырех направлениях, то есть вверх, вниз, влево, вправо. Я знаю, что мне нужно настроить прослушиватель касаний для обнаружения касания мяча, но как тогда создать эффект взрыва? Теперь эта проблема решена . Я показываю на экране несколько шаров, чтобы пользователь мог щелкнуть по ним и взорвать их.

Вот мой собственный вид:

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 с похожими свойствами, за исключением того, что это направление и метод разнесения, чтобы перемещать его в направлении, и флаг анимации, чтобы остановить его движение.

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();
}

Мой XML-макет выглядит следующим образом:

<?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" />

Я добавляю BallView и SmallBall в класс активности следующим образом:

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);

Я добавляю несколько BallView и их относительный массив SmallBall в разных положениях. Теперь, что происходит независимо от того, где я нажимаю на последний добавленный экран, BallView начинает взрываться. После последней секунды и так далее. Итак, вот 2 проблемы:

  1. Почему вызывается событие onClick / onTouch независимо от того, где я нажимаю на экране? Он должен вызывать событие слушателя только тогда, когда я нажимаю на конкретный BallView.
  2. И, во-вторых, почему BallView начинает взрываться в обратном порядке по сравнению с тем, как они добавляются в макет?

Мой класс слушателя:

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.
    }

Я обрезал код из-за рассматриваемого ограничения символов.

6
задан Harry Joy 5 March 2012 в 18:03
поделиться