我正在为Android实现3d卡翻转动画(api> 14),并且大屏幕平板电脑(> 2048 dpi)有问题。在问题调查期间,我进入了以下基本步骤:
尝试仅使用矩阵和照相机的rotateY角度将 View (简单的ImageView)转换为某个角度,并且对于角度 120(已转换并显示)可以正常使用,但是当角度在60至120之间时图像会消失(只是不显示) 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等上运行,
请告诉我我做错了,并建议一些解决方法...谢谢!!!
最佳答案
此问题是由用于计算变换的摄像机距离引起的。尽管 Camera
类本身并未对主题进行过多说明,但在 View.setCameraDistance()
method(强调我的文档)的文档中对此进行了更好的解释:
老实说,我以前从未见过这种特殊效果(根本没有画图),但我怀疑它可能与我过去遇到的this question related to perspective distortion有关。 :)
因此,解决方案是使用 Camera.setLocation()
方法来确保不会发生这种情况。View.setCameraDistance()
方法的一个重要区别是单位与不同,因为setLocation()
不使用像素。虽然setCameraDistance()
会调整密度,但setLocation()
不会。因此,如果要基于 View 的尺寸计算适当的z距离,请记住要调整密度。例如:
float cameraDistance = Math.max(image1.getMeasuredHeight(), image1.getMeasuredWidth()) * 5;
float densityDpi = getResources().getDisplayMetrics().densityDpi;
camera.setLocation(0, 0, -cameraDistance / densityDpi);
关于android - Android View 3d在高分辨率屏幕上旋转变换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27704670/