Проблема рендеринга в ландшафтном режиме на Android - PullRequest
0 голосов
/ 23 апреля 2019

Я использую View.setRotationY (), чтобы вращать мои представления в соответствии с ориентацией устройства.Все хорошо работает в портретном режиме.Но когда устройство поворачивается, фон макета искажается.

code:

if(under == RecyclerView.NO_POSITION){
        aboveBinding.vContainerLeft.rotationY = 0F
        aboveBinding.vContainerRight.rotationY = 0F
    }else if(under == above - 1){
        val half = width / 2
        val degrees = 90 * ((width - offset).toFloat() / half)
        aboveBinding.vContainerLeft.pivotX = aboveBinding.vContainerLeft.width.toFloat()
        aboveBinding.vContainerLeft.rotationY = degrees
        aboveBinding.vContainerRight.rotationY = 0F
    }else{
        val half = width / 2
        val degrees = -90 * (offset.toFloat() / half)
        aboveBinding.vContainerRight.pivotX = 0F
        aboveBinding.vContainerLeft.rotationY = 0F
        aboveBinding.vContainerRight.rotationY = degrees
    }

Когда я использую метод View.setRotationY (), чтобы установить угол между -60 градусами и -90 градусамиград, я ожидаю, что фон будет выглядеть как этот угол в 0 ~ -60 .Но получается такой угол в -60 ~ -90

Опять же, когда я устанавливаю угол между 75 и 90 градусами, я ожидаю, что фон будет выглядеть так угол в 0 ~ 75 .Но получается вот такой угол в 75 ~ 90

Как мне исправить это??

1 Ответ

0 голосов
/ 25 апреля 2019

Я получил идею от GitHub - FlipViewPager. он использует «Camera» + «Matrix» вместо «setRotationY ()», например:

canvas.save()
    mCamera.save()
    mCamera.rotateY(degreeRange * degRadio)
    mCamera.getMatrix(mMatrix)
    mMatrix.preScale(0.25F, 0.25F)
    mMatrix.postScale(4F, 4F)

    mMatrix.preTranslate(preDx, preDy)
    mMatrix.postTranslate(-preDx, -preDy)

    canvas.concat(mMatrix)

Я добавляю код "mMatrix.preScale (0,25F, 0,25F) mMatrix.postScale (4F, 4F) "для моей программы, и она работает хорошо, без ошибки рендеринга

...