метод.

ываясь на моем предыдущем вопросе "Как создать BottomBar в виде StickyBottomCaptureLayout в Camera2 Android API?"Я создал макет сStickyBar (SB), который всегда заблокирован над / рядом с системной панелью. Я устанавливаю положения по умолчанию и координаты SB и другой макет вonLayout() (именно таккак мой ответ).

Верхний макет простой обычайDrawView который имеет ArrayListPaths нарисовано пользователем. Когда устройство вращается, оно вызываетonDraw() и звонит несколько разcanvas.drawPath(), Тем не менееPaths перерисовываются с теми же координатами, что и раньше, но с другой позицией и размером макета. Эти скриншоты демонстрируют реальное поведение:

слева: портрет - справа: пейзаж

Но я хочу сохранить те же координаты и позиции при изменении ориентации, например так:

слева: тот же портрет, что и выше - справа: пейзаж с «портретными» координатами

Блокировка моей активности сandroid:orientation="portrait" не ожидаемое решение. я используюandroid:configChanges="orientation" иOrientationListener обнаружить вращение и предотвратить полное воссозданиеActivity.

Я пытался установить другие разные позиции вonLayout() но, очевидно, это не правильный путь.

Я ранее пытался преобразовать множественноеPathвот так:

for (Path path : mPathList) {
    Matrix matrix = new Matrix();
    RectF bounds = new RectF();
    path.computeBounds(bounds, true);

    // center points to rotate
    final float px = bounds.centerX();
    final float py = bounds.centerY();
    // distance points to move 
    final float dx; // ?
    final float dy; // ?
    /** I tried many calculations without success, it's 
        not worth to paste these dumb calculations here... **/

    matrix.postRotate(rotation, px, py); // rotation is 90°, -90° or 0
    matrix.postTranslate(dx, dy); // ?
    path.transform(matrix);
}

Я также попытался повернуть холст следующим образом:

@Override
protected void onDraw(Canvas canvas) {
    canvas.save();
    canvas.rotate(rotation); // rotation is 90°, -90° or 0

    canvas.drawColor(mDrawHelper.getBackgroundViewColor());
    for (int i=0; i < mPathList.size(); i++) {
       canvas.drawPath(mPathList.get(i), mPaintList.get(i));
    }
    if (mPath != null && mPaint != null)
       canvas.drawPath(mPath, mPaint);

    canvas.restore();
}  

Во всяком случае, я попробовал много манипуляций, но, похоже, ничего не работает в этом конкретном случае. У кого-нибудь есть яркая и невероятная идея, которой можно поделиться, которая может привести меня в правильном направлении?
Заранее спасибо за помощь.

Ответы на вопрос(3)

Ваш ответ на вопрос