我正在为安卓(api > 14)实现3D翻转动画,但在大屏幕平板电脑(> 2048 dpi)上遇到了问题。在问题调查过程中,我发现了以下基本块:
尝试仅使用矩阵和相机的rotateY对视图(简单的ImageView)进行变换,通过一些角度进行旋转,当角度<60和角度>120时,它可以正常工作(变换和显示),但是当角度在60和120之间时,图像会消失(不会显示)。这是我使用的代码:
private void applyTransform(float degree)
{
float [] values = {1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f};
float centerX = image1.getMeasuredWidth() / 2.0f;
float centerY = image1.getMeasuredHeight() / 2.0f;
Matrix m = new Matrix();
m.setValues(values);
Camera camera = new Camera();
camera.save();
camera.rotateY(degree);
camera.getMatrix(m);
camera.restore();
m.preTranslate(-centerX, -centerY); // 1 draws fine without these 2 lines
m.postTranslate(centerX, centerY); // 2
image1.setImageMatrix(m);
}
这是我的布局XML:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/naponer"
android:clickable="true"
android:scaleType="matrix">
</ImageView>
</FrameLayout>
以下是我的情况:
- 在小屏幕800X480、1024x720等上运行时,无论角度和中心点如何,都能正常工作。
- 在大屏幕设备2048x1536、2560x1600等上,当角度 < 60 和 > 120 时能正常工作。
- 如果旋转不以中心为轴心(矩阵预处理和后处理的注释掉),则在任何设备上的任何角度都能正常工作。
- 当在大屏幕设备上旋转中心为轴心且角度在60到120度之间时,会失败(图像消失)。
请告诉我问题出在哪里,并提供一些解决方法...谢谢!!!
camera.setLocation(0, 0, -20f)
。 - matiash