2013-07-24 2 views
3

Я хочу создать кнопку полутональной формы, которая доступна только в том месте, где она видна, а не во всей прямоугольной области.хочу создать кнопку полуокрубата, которую можно щелкнуть в определенном регионе

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

Я хочу щелкая влиять только на этот синий регион.

+0

Может ли такая синяя область быть цветной? или это будет образ? просто подумать о лучшем подходе. – Suji

ответ

1

Вы можете сделать это путем захвата Bitmap представления Button, t купив альфа-значение пикселя x/y.

Чтобы получить растровое изображение для кнопки:

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

я рекомендовал бы только сделать это один раз, и сохранение результатов, таким образом, вы не создаете новое растровое изображение каждый раз, когда вы касаетесь кнопки.

Затем вы переопределяете OnTouchEvent кнопки, чтобы у вас был локальный x/y, где пользователь постучал. Если альфа в этом месте равна 0, у вас есть область без клика. Это не так просто, как onClickListener, но он должен выполнять эту работу.

Таким образом, вы можете использовать любую произвольную форму, а не только пончик. Цвета, текстуры, что угодно.

+0

может у вас объяснить немного больше об этом. Мне нужно создать растровое изображение? –

+0

Код, который я показал, создаст объект «Bitmap» из вашего объекта «Button» (он называется ' В этом примере вы проверяете прозрачность любого пикселя. – Geobits

+0

Какое условие проверить прозрачность, потому что я не работаю с растровыми изображениями –

0

Я не совсем уверен в этом, но я думаю, что эта схема будет работать. Создайте представление изображения в макете, чтобы отобразить изображение и сделать его интерактивным с помощью onTouchEvent. Таким образом вы можете получить координаты щелчка. Убедитесь, что щелчок находится внутри внутреннего и внешнего радиусов, и если да, сделайте данный ответ.

Вот несколько расчетов, которые будут нуждаться:

центр окружности -Assuming центр находится в самом низу изображения, это будет выглядеть примерно так (не обязательно точные методы)

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(); 
+0

его хороший трюк для работы, но у меня есть дуга круга, центр которого не на изображении. поэтому я не могу найти его центр. :( любые другие предложения –

Смежные вопросы