Android横向模式下的渲染问题

Posted

技术标签:

【中文标题】Android横向模式下的渲染问题【英文标题】:Render problem in Landscape mode on Android 【发布时间】:2019-04-23 11:32:58 【问题描述】:

我使用 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

我该如何纠正这个..?

【问题讨论】:

截图根本看不清楚,尝试发布实际截图和代码的sn-p,涵盖您正在尝试做的事情 @y.allam 谢谢你的建议,我修改了我的问题 这个问题也和View的pivot有关;当我使用默认枢轴(视图中心)时,它会很好地工作 【参考方案1】:

我从 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)" 到我的程序中,它运行良好,没有渲染错误

【讨论】:

以上是关于Android横向模式下的渲染问题的主要内容,如果未能解决你的问题,请参考以下文章

将 Android DialogFragment 显示为纵向模式下的对话框和横向模式下的活动的一部分

Android 纵向和横向布局

媒体查询以区分横向模式下的 Galaxy 和桌面查看?

PlayN iOS横向模式

如何在横向模式下显示 android 启动画面?

Android横向模式看起来很糟糕