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横向模式下的渲染问题的主要内容,如果未能解决你的问题,请参考以下文章