一个多星期以来,我一直在努力使用一项功能在屏幕上绘制一些图片(覆盖相机预览),然后根据相机的动作移动图片。例如:我将手机放在横向位置(应用程序始终处于该方向)并用相机查看我的桌子。然后我触摸屏幕在桌子上画一个盒子,然后用手机摄像头看天花板 - 这应该让盒子向相反的方向移动 - 这是向下的(创造了一个真正存在盒子的错觉)。
我可以在具有透明背景的表面视图中绘制一个对象,该背景覆盖相机预览并使用Sensor.TYPE_GRAVITY
(Z轴读数)上下移动对象。它非常流畅,完美地模仿了上/下运动。
问题开始了,当我想要水平移动时 - 我找不到传感器类型,这将有助于我达到预期的效果。
要在屏幕上移动图片,我首先在用户触摸屏幕时保存当前传感器读数(绘制图片):
temporaryX = ??
- (我还没想到)。
temporaryY = accelerometerHandler.getAccelZ;
然后从新读数中减去该值:
differenceX = newX - temporaryX;
differenceY = accelerometerHandler.getAccelZ - temporaryY;
然后使用这些修改器在画布上绘制图片:
canvas.drawBitmap(image, posX + differenceX, posY + differenceY, null);
我尝试使用Sensor.TYPE_ROTATION_VECTOR
,这让我可以水平移动并获得相当不错的效果,但是当我向上或向下看时传感器读数也会改变,这与垂直运动混淆(对象以一定角度移动)
我应该坚持使用传感器,还是针对上述问题采用不同的方法?即使我搜索了一个类似的问题很多 - 我找不到任何涵盖该问题的主题。谢谢你的所有答案!