Android上横向模式下的渲染问题

时间:2019-04-23 11:32:59

标签: android android-layout orientation landscape rotatetransform

我使用View.setRotationY()根据设备的方向旋转视图。肖像时一切正常。但是当设备旋转时,布局的背景就会失真。

代码:

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度之间设置角度时,我希望背景看起来像这样angle in 0 ~ -60。但是,事实证明是这样的angle in -60 ~ -90

同样,当我将角度设置在75度和90度之间时,我希望背景看起来像这样angle in 0 ~ 75。但是,事实证明是这样的angle in 75 ~ 90

我该如何纠正?。

1 个答案:

答案 0 :(得分:0)

我从GitHub--FlipViewPager获得了一个想法。它使用“相机” +“矩阵”而不是“ 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)”添加到我的程序中,并且效果很好,没有呈现错误