Синхронизированная прокрутка нескольких пользовательских представлений

У меня есть пользовательский вид, который рисует масштаб и обрабатывает событие touch (горизонтальная прокрутка этого масштаба). Чертежная деталь:

@Override
public void onDraw(Canvas canvas){
    startingPoint = mainPoint;
    counter = 0;
    int i = 0;

    while (startingPoint <= scaleWidth) {
        if(i % 4 == 0) {
            size = scaleHeight / 4;

            if (counter < 24) {
                counter = counter + 1;
            } else {
                counter = 1;
            }

            String c = Integer.toString(counter);
            canvas.drawText(c, startingPoint, endPoint - (size + 20), textPaint);

        } else {
            if(i % 2 == 0) {
                size = scaleHeight / 8;
            } else {
                size = scaleHeight / 16;
            }
        }

        if(startingPoint >= closest) {
            //метки шкалы
            canvas.drawLine(startingPoint, endPoint - size, startingPoint, endPoint, rulerPaint);

        }

        startingPoint = startingPoint + pxmm;

        i = i + 1;


    }
}

И TouchEvent:

public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            float x = event.getX();
            prevx = x;
            System.out.println(x);
            break;
        case MotionEvent.ACTION_MOVE:
            float z = event.getX();
            float dist = z - prevx;
            mainPoint = prevsp + dist;
            closest = mainPoint - ((int)(mainPoint / pxmm)) * pxmm;
            break;
        case MotionEvent.ACTION_UP:
            float y = event.getX();
            prevsp = mainPoint;
            break;
    }

    invalidate();

    return true;
}

В activity_main.xml I вставить две копии этого представления:

<LinearLayout 

android_layout_width="match_parent"
android_layout_height="match_parent"
android_orientation="vertical"
android_gravity="center|top">

<net.manualuser.calibr.TimeScale
    android_id="@+id/my_scale"
    android_layout_width="match_parent"
    android_layout_height="wrap_content"
    android_background="@android:color/white" />

<net.manualuser.calibr.TimeScale
    android_id="@+id/my_scale1"
    android_layout_width="match_parent"
    android_layout_height="wrap_content"
    android_background="@android:color/white" />

Что я должен сделать, чтобы синхронизировать эти два вида так, чтобы при прокрутке одного масштаба другой перемещался одновременно. Если я прав, мне нужно установить OnTouchListener для моих пользовательских представлений в MainActivity:

TimeScale defScale = (TimeScale)findViewById(R.id.my_scale);
TimeScale defScale1 = (TimeScale)findViewById(R.id.my_scale1);
defScale.setOnTouchListener(this);
defScale1.setOnTouchListener(this);

И написать код для их синхронизации в методе onTouch (в MainActivity). Но теперь у меня есть идея, как это сделать?

1 ответ

  1. Чтобы заставить его работать, мне нужно передать событие обоим моим представлениям в onTouch in MainActivity:

    public boolean onTouch(View v, MotionEvent event){
        defScale.onTouchEvent(event);
        defScale1.onTouchEvent(event);
        return false;
    }