Я использую дерьмо в кнопках неправильной формы в своем приложении, и чтобы изменить «горячую зону» или «активируемую область» кнопки, я просто использую метод Bitmap.getPixel()
, чтобы проверить наличие альфа на используемом изображении.Если метод возвращает 0, то не выполняет событие щелчка.
Пример: (1) Создайте свою кнопку как обычно, в зависимости от того, что вам нужно. (2) Определите Bitmap
и присвойте ему то же изображение, которое используется для кнопки. (3) Получите координаты X и Y касания или щелчка. (4) Передайте координаты методу .getPixel(x,y)
.
Пример кода:
// ** Declare your Bitmap somewhere **
final Bitmap TheBitmap;
TheBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.TheImage);
// ** My onTouch code **
public boolean onTouch(View v, MotionEvent event) {
int eventPadTouch = event.getAction();
switch (eventPadTouch) {
case MotionEvent.ACTION_DOWN:
if (iX>=0 & iY>=0 & iX<TheBitmap.getWidth() & iY<TheBitmap.getHeight()) { // ** Makes sure that X and Y are not less than 0, and no more than the height and width of the image.
if (TheBitmap.getPixel(iX,iY)!=0) {
// * A non-alpha area was clicked, do something
}
}
return true;
}
return false;
}
event.getX()
и event.getY()
просто дают вам координатыгде вы коснулись кнопки.
** Приведенный выше пример поможет вам в правильном направлении.Есть несколько проверок, которые нужно добавить в код, чтобы гарантировать отсутствие ошибок.