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.
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.
您可以通过获取 的Bitmap
表示来做到这一点Button
,然后测试 x/y 像素的 alpha 值。
要获取按钮的位图:
Bitmap buttonBmp;
button.setDrawingCacheEnabled(true);
buttonBmp = Bitmap.createBitmap(button.getDrawingCache());
button.setDrawingCacheEnabled(false);
我建议只执行一次并保存结果,这样您就不会在每次触摸按钮时都创建新的位图。
然后你覆盖按钮的 onTouchEvent,这样你就有了用户点击的本地 x/y。如果该点的 alpha 为 0,则您有一个不可点击的区域。它不像 ' 那样简单onClickListener
,但它应该可以完成这项工作。
这样您就可以使用任意形状,而不仅仅是甜甜圈。颜色,纹理,随便什么。
我对此并不完全确定,但我认为这个方案会奏效。在布局中创建一个图像视图以显示图片并通过 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();