想要在特定区域中创建可点击的半圆环形状按钮

时间:2013-07-24 18:27:21

标签: android android-layout

我想创建一个半圆环形状的按钮,只能在可见的区域中单击,而不是在整个矩形区域中。

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

我想点击只影响这个蓝色区域。

2 个答案:

答案 0 :(得分:1)

你可以抓住Bitmap的{​​{1}}表示,然后测试x / y像素的alpha值。

获取按钮的位图:

Button

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

然后你覆盖Button的onTouchEvent,这样你就拥有了用户点击的本地x / y。如果该点中的alpha为0,则表示您具有不可点击的区域。它不像Bitmap buttonBmp; button.setDrawingCacheEnabled(true); buttonBmp = Bitmap.createBitmap(button.getDrawingCache()); button.setDrawingCacheEnabled(false); 那么简单,但应该可以完成这项工作。

这样你可以使用任意形状,而不仅仅是甜甜圈。颜色,纹理等等。

答案 1 :(得分: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();