1

我有一个绘图活动,它创建一个占据整个屏幕的自定义“画布”视图,允许用户在其上绘图。我需要将 Activity 锁定为纵向,因为绘图应用程序是画板的替代品,并且用户需要旋转“垫”来绘制,而垫子不会在它们上面翻转。这当然意味着选项菜单也被锁定到该方向,并且根据用户的不同,菜单可能会从顶部、底部或侧面弹出。我希望选项菜单始终位于相对于用户的底部...我正在考虑的一些选项,希望有任何建议或信息:

  1. 允许方向更改,因此菜单根据需要移动,然后使用 SensorManager 监听方向,并手动将画布视图旋转回“正确”方向(纵向)。这会很丑陋,因为画布的旋转可能会有延迟,并且由于 X/Y 被交换,它会引入一些潜在的复杂计算等。
  2. 限制方向​​更改,然后使用 SensorManager 监听方向,并手动将选项菜单旋转回底部。不知道这是否可能。
  3. 锁定方向,并创建一个自定义视图,该视图拦截菜单按钮并显示我需要管理的“假”选项菜单等。真的不想替换内置的操作系统功能,这可能是一场噩梦维护未来不同版本的操作系统等。

有人对如何处理这个有任何想法吗?如果#2 是可能的,我会很高兴,但找不到与此相关的任何内容。

谢谢,

保罗

编辑:

已经确认 #2 是不可能的,所以我想我的选择是 #1、#3,除非其他人有任何想法?

4

1 回答 1

0

我的解决方案如下:

  • 允许在 Activity 的 Android Manifest 中进行正常的方向更改。
  • 在自定义的“画布”视图构造函数中,启动一个跟踪字段 mDisplay,它通过以下方式获取显示信息:

代码:

mDisplay = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
  • 在 onDraw() 中,检查显示旋转是否为 0 以外的值,然后将画布旋转回 0 旋转值:

代码:

if (mDisplay.getRotation() > 0) {
    canvas.save(Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
    canvas.rotate(-mDisplay.getRotation(), px, py);
    ...
    do stuff
    ...
    canvas.restore();
}

不确定这是不是最好的解决方案,但它似乎有效。

于 2011-03-01T02:08:06.593 回答