【发布时间】:2015-02-26 13:43:45
【问题描述】:
我正在为 android (api > 14) 实现 3d 卡片翻转动画,但大屏幕平板电脑 (> 2048 dpi) 存在问题。在问题调查期间,我来到了以下基本块:
尝试仅使用矩阵和旋转相机的某个角度来转换视图(简单的 ImageView),对于角度 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...上运行时,角度 120 可以正常工作...
- 如果旋转未居中,则在任何设备上的任何角度都可以正常工作(矩阵前后翻译已注释掉)
- 在大屏幕设备上运行时失败(图像消失),旋转居中,角度在 60 到 120 度之间。
请告诉我做错了什么并建议一些解决方法...谢谢!!!
【问题讨论】:
-
如果您在 AndroidManifest.xml 中为活动定义 android:hardwareAccelerated="false",问题会消失吗?
-
无效,测试了硬件加速启用和禁用情况
-
你试过玩相机距离吗(例如
camera.setLocation(0, 0, -20f)? -
是的!有效!!!谢谢!!!默认值为 0, 0, -8f...现在正在尝试查找有关此设置的更多信息...请解释它如何影响绘图,以便从默认相机位置旋转时图像消失?
-
@matiash 您可以回答这个问题,提供有关它如何影响问题的更多详细信息。
标签: android matrix rotation transform resolution