iOS代码:
我在iOS上有工作代码,为UIView的图层准备3D转换:
CATransform3D t = CATransform3DIdentity;
t.m34 = -1.0f/500.0f;
t = CATransform3DTranslate(t, 10.0f, 20.0f, 0.0f);
t = CATransform3DRotate(t, 0.25f * M_PI, -1.0f, 0.0f, 0.0f);
我正在尝试将上述代码移植到Android。我正在尝试准备android.view.animation.Transformation t
,它会做同样的事情。它将由ViewGroup.getChildStaticTransformation(View v, Transformation t)
执行。
未完成的Android代码:
t.clear();
t.setTransformationType(Transformation.TYPE_MATRIX);
android.graphics.Camera camera = new android.graphics.Camera();
// set perspective (m34) here.. how??
camera.translate(10.0f, 20.0f, 0.0f);
camera.rotateX(-1.0f * Math.toDegrees(0.25 * Math.PI));
camera.getMatrix(t.getMatrix());
我的主要问题:
主要问题是我不确定如何在Android中设置透视t.m34 = -1.0f/500.0f
。阅读docs是相当神秘的,我最好的选择是使用Camera.setLocation()
。此外,文档没有说明单位,那么什么是合适的价值呢?
另一个问题是setLocation()
只能从API 12获得,所以我真的需要在Matrix中手动设置它(或通过一些转换)。有什么想法吗?
最终评论:
我知道可能存在更多问题..例如translate()
单位,转换顺序以及我们在Android中转换相机但在iOS中转换对象的问题。我稍后会谈到所有这些:)