之前我曾问过这个问题,但没有得到任何好的反馈,所以我再次发帖以试图获得更多帮助
好的,我正在使用此类磁盘制作应用:http://dl.dropbox.com/u/8051037/disk_full.png
我将两个戒指作为单独的图像,但我需要找出一种方法来定位它们,就像它们在图像中一样,首先关闭。我不太了解布局,所以我真的不知道从哪里开始。
另外,我需要将黑线定义的每个部分作为不同的图像按钮。我到处寻找答案,但到目前为止还没有人能帮助我。
感谢您的帮助,现在已经坚持了几个月的问题!
编辑:为了让我的问题更加清晰,我将完全解释我在做什么。我正在进行发射器修改,使其看起来像是来自钢铁侠2的Tony Stark的手机,如下所示:http://perceptionnyc.com/sites/default/files/D_01_PDA_flat_01.jpg。
(原始问题:How make one image into multiple buttons and some other stuff)
答案 0 :(得分:5)
最好的方法是将图片创建为单个视图,覆盖onTouchEvent()
方法,然后在活动中调用.getX()
和.getY()
。然后,您可以通过一些简单的数学运算确定点击的位置。
这将导致比尝试创建多个重叠视图和非矩形按钮更好的解决方案。
修改:
给定(x, y)
,您可以计算点击使用毕达哥拉斯定理的位置来获得斜边的长度(单击圆圈)并使用tan -1 获得角度( opp / adj)(点击了馅饼切片)。
仅供参考,图片中注明的(x,y)
实际上是与图片中心的差异,而不是getX()
和getY()
的值。
Here is an example类似的代码用于ADW.Launcher中的圆形颜色选择器。
答案 1 :(得分:1)
做杰克说的话。尝试开始这样的事情:
class Disk extends ImageView {
public Disk(Context context, AttributeSet attrs) {
super(context, attrs);
}
public boolean onTouchEvent (MotionEvent event) {
double x = event.getX() - getWidth() / 2.0;
double y = - ( event.getY() - getHeight() / 2.0);
// Compare this to the radii that mark the rings
double distFromOrig = Math.sqrt( x*x + y*y );
// Compare this to the angles of your slices (in radians)
double angle = Math.atan2(y, x);
return true;
}
}
然后把它放在这样的视图中:
<view class="package.name.goes.here.Disk"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/disk_full">
</view>
缺点是没有关于用户选择的部分的即时视觉反馈。
答案 2 :(得分:0)
尝试使用图像地图,我认为你可以制作两个不同半径的圆圈,根据顺序,一个(内部)将位于另一个之上。
工作JSfiddle示例http://jsfiddle.net/mazlix/wksZq/
我刚刚阅读了您的旧帖子,在这种情况下,我推荐上述用户使用.getX()
.getY()
发布的内容,您可以制作一张包含所有动画的图片,或者两张较小的动画。内圈图像具有透明度,可以将它们准确地设置在您想要的位置(在彼此之上),只需确保使用position:absolute