我使用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
我该如何纠正?。
答案 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)”添加到我的程序中,并且效果很好,没有呈现错误