Я создал собственный вид в 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 вопроса:
- Почему вызывается событие onClick / onTouch, независимо от того, где я нажимаю на экран? Он должен вызывать событие слушателя только когда я нажимаю на конкретный BallView.
- А во-вторых, почему 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.
}
Я обрезал код из-за рассматриваемого ограничения символов.