2

我想将这个复杂的控件移植到我的 Android XML 布局中:

我需要按钮(心脏,云,...)和中央旋钮作为 ImageButtons,所以它们应该是单独的对象并定位在准确的位置。

问题是如何布局如此复杂的按钮和背景,以便在具有不同分辨率的多个设备上正确显示。

在此处输入图像描述

4

3 回答 3

1

如果您被允许动态实现它,这里有一些提示:

  1. 创建单独的图像(背景)

    • 1 个旋钮图像
    • 每个小按钮 1 张图片
    • 1 张图片作为背景
  2. 半径

    • 测量从背景中心到应该放置小按钮的点的距离(背景图案的半径),以像素为单位。
    • 对于不同的屏幕(不同的分辨率),您可能需要不同的尺寸
  3. 放置按钮

    • 放置背景图像和旋钮ImageButton使旋钮的中心与背景的中心匹配 - 两个图像都应该是矩形,所以中心点应该在对角线的交叉点
    • 使用球坐标检索小按钮的笛卡尔 (x,y) 坐标 - 它们的中心应位于这些点上
  4. 命中测试

    • 你所有的图片都应该有透明的背景
    • 只有当事件位于 ImageButton 背景的不透明部分时,才能实现命中测试成功
  5. 回转

    • 要旋转旋钮,您可以查找有关旋转 ImageButton 的背景的更多信息。我没有尝试过这样的事情......
于 2013-11-11T12:29:24.170 回答
0

您可能必须拦截 onTouchEvent() 并处理原始事件。这样您就可以知道用户手指在图片上的位置。

如果您可以容忍圆形图标下方的方形按钮,则更简单的解决方案是使用RelativeLayout。(3 种状态,正常-选中-按下。)实际上,您不需要按钮,您只需让视图可点击即可。

我不确定您希望用户对中央旋钮做什么:按下它,用两个或三个手指转动等。原则上,您可能有一个方形视图,其角被不可点击的透明方形视图覆盖(或者它们应该是可点击的?想法是旋钮不应该接收到该区域的点击)。

另一种可能的方法是不实现单独的按钮,而是为整个控件组合的每个状态提供一个方形图像。

你肯定必须知道你的图像的实际大小——看ViewTreeObserver.OnGlobalLayoutListenergetMeasuredWidth()/ getMeasuredHeight()(当点击发生时,后两个可能已经被使用,尽管在布局发生之前它们返回零)。

于 2013-11-11T10:49:07.300 回答
0

您可以从ArcMenuCircleLayout开始并对其进行自定义以支持位于中心的小部件。或者您可以从头开始创建自己的布局。此处提供了如何执行此操作的好文章。

于 2013-11-11T10:54:44.910 回答