Android, несколько просмотров на экране, но только один ответит на прикосновение - PullRequest
0 голосов
/ 02 июня 2011

У меня есть основной FrameLayout и коллекция шаров 5 на 7 (каждый вид) под ним. Я добавил onTouchEvent () для переключения цветов. Но независимо от того, на какой шар я нажимаю, только нижний правый шар реагирует на мое касание (это был последний, который был нарисован). Есть ли способ заставить каждый шар распознавать свое событие касания?

Мысль: я думаю, что это может произойти, потому что я вставляю каждый шар (вид) в основной FrameLayout, который должен показывать только одну вещь за раз. Я думаю, что это как стек просмотров, и только самый верхний отвечает. Есть идеи?

в классе Ball

public class Ball extends View {
    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    ...
}

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawCircle(x, y, r, mPaint);
}

public boolean onTouchEvent(MotionEvent event) {
    int eventAction = event.getAction();

    if(eventAction == MotionEvent.ACTION_DOWN) {
        switchcolor();
        this.postInvalidate();
        return true;
    } else {
        return false;
    }
}

private void switchcolor() {
    mPaint.setColor(touched ? 0xFFFFFFFF : 0xFFA606E2);
    touched = !touched;
}

в основной деятельности

FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
...

some loop {
    main.addView(new Ball(this, x, y, radius - margin));
}

Ответы [ 2 ]

0 голосов
/ 04 июня 2011

решено с помощью 2 LinearLayout (s).

см. здесь для хорошего ответа. Я попробовал оба ответа, один с использованием LinearLayout (s), а другой, TableLayout. В случае использования LinearLayout (s) размер ячеек будет одинаковым независимо от длины текста

0 голосов
/ 02 июня 2011

Когда вы создаете пользовательские сборки, просто создайте поле с именем last один или что-то в этом роде ... и измените цвет шара, только если он последний:

some loop {
    Ball ball = new Ball(this, x, y, radius - margin);
    if(this is the last one)
        ball.setLast(true);
    else
        ball.setLast(false);
    main.addView(ball);
}

Затем внутри класса Ball в его onTouchEvent:

if(isLast()){
    // do it
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...