3

I want to create a semi doughnut shaped button which is only clickable in the region where it is visible and not in the the whole rectangular region.

http://i.stack.imgur.com/MKD45.png

I want clicking to affect only this blue region.

4

2 回答 2

1

您可以通过获取 的Bitmap表示来做到这一点Button,然后测试 x/y 像素的 alpha 值。

要获取按钮的位图:

Bitmap buttonBmp;
button.setDrawingCacheEnabled(true);
buttonBmp = Bitmap.createBitmap(button.getDrawingCache());
button.setDrawingCacheEnabled(false);

我建议只执行一次并保存结果,这样您就不会在每次触摸按钮时都创建新的位图。

然后你覆盖按钮的 onTouchEvent,这样你就有了用户点击的本地 x/y。如果该点的 alpha 为 0,则您有一个不可点击的区域。它不像 ' 那样简单onClickListener,但它应该可以完成这项工作。

这样您就可以使用任意形状,而不仅仅是甜甜圈。颜色,纹理,随便什么。

于 2013-07-24T18:58:39.750 回答
0

我对此并不完全确定,但我认为这个方案会奏效。在布局中创建一个图像视图以显示图片并通过 onTouchEvent 使其可点击。这样你就可以得到点击的坐标。检查以确保点击在内部和外部半径内,如果是,则执行给定的响应。

以下是一些需要的计算:

圆心-假设中心是图像的最底部,这看起来像这样(不一定是精确的方法)

centerX = img.getX() + img.getWidth()/2;
centerY = img.getY() + img.getHeight()/2;

请记住,屏幕坐标从上到下,从左到右。

查找距发生点击的中心的距离

Dx = click.getX() - centerX;
Dy = click.getY() - centerY;
D = Math.sqrt(Dx^2 + Dy^2);

然后你只需要检查距离是否在半径范围内(不确定如何在这里获得确切的半径,可能只需要猜测和检查。另一种可能是半圆的顶部是图片的顶部并且然后最大高度为外半径。)

if(D<=outerR && D>=innerR)
    respond();
于 2013-07-24T18:45:33.920 回答