将一个图像分成几个图像按钮

时间:2011-05-24 16:28:51

标签: android

之前我曾问过这个问题,但没有得到任何好的反馈,所以我再次发帖以试图获得更多帮助

好的,我正在使用此类磁盘制作应用: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

3 个答案:

答案 0 :(得分:5)

最好的方法是将图片创建为单个视图,覆盖onTouchEvent()方法,然后在活动中调用.getX().getY()。然后,您可以通过一些简单的数学运算确定点击的位置。

这将导致比尝试创建多个重叠视图和非矩形按钮更好的解决方案。

修改

enter image description here

给定(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