Как работать с двумя экземплярами SeekBar (или любым другим элементом управления, например, Button) одновременно с помощью сенсорного экрана? - PullRequest
1 голос
/ 06 июля 2011

Я разрабатываю приложение, которое будет контролировать громкость до восьми музыкальных треков одновременно.Одним из вариантов использования является действие dj - смешивание двух треков путем постепенного исчезновения Track1 и постепенного появления Track2 одновременно.

Учитывая вышеизложенное, я создал Activity с двумя *Реализовано 1005 * SeekBar экземпляров и onProgressChanged (...).Теперь моя проблема возникает!Я не могу контролировать два SeekBars одновременно.Я могу действовать только по одному за раз.

Глядя на документацию мультитач для платформы Android, я могу только напугаться ее сложностью.И, глядя на код, я думаю, что решения не лежат, по крайней мере, напрямую.

Есть идеи?

Спасибо, PP

Ответы [ 2 ]

1 голос
/ 07 июля 2011

OK.Итак, после дальнейших исследований о том, как обрабатывать события мультитач и следуя совету Дамиана, я дошел до того, что перехватывал все сенсорные события, чтобы определить, скользит ли каждый указатель (в данном случае палец) нанабор заранее определенных SeekBar экземпляров, vol1 и vol2 .

код для надписи Activity :

@Override
public boolean dispatchTouchEvent (MotionEvent ev)
{
    Rect sb1Rect = new Rect();
    Rect sb2Rect = new Rect();
    vol1.getGlobalVisibleRect(sb1Rect);
    vol2.getGlobalVisibleRect(sb2Rect);

    for (int i = 0; i < ev.getPointerCount(); i++) {
        int pId = ev.getPointerId(i);
        int coordX = (int) ev.getX(i);
        int coordY = (int) ev.getY(i);

        if(sb1Rect.contains(coordX, coordY)) {
            Log.d(TAG, "[PID=" + pId + "] -> SeekBar 1 -> x:" + coordX + ", y:" + coordY);
        } else if (sb2Rect.contains(coordX, coordY)) {
            Log.d(TAG, "[PID=" + pId + "] -> SeekBar 2 -> x:" + coordX + ", y:" + coordY);
        }
    }

    LinearLayout l =(LinearLayout) this.findViewById(R.id.linearLayout1);
    l.dispatchTouchEvent(ev);

    return true;
}

Теперь мне нужно только рассчитать значение каждого прикосновения SeekBar на основе его относительного X координата (не абсолют, который относится ко всему Активность ) и соответственно установите значение прогресса ( .setProgress (int value) ).

0 голосов
/ 06 июля 2011

Создание родителя / макета, который будет отправлять события мультитач как отдельные события соответствующим дочерним элементам.

// РЕДАКТИРОВАТЬ http://androiddev.vipserv.org/wordpress/?p=112

...