Я создал ImageButton с селектором для нажатых и ненажатых состояний, и это прекрасно работает.
Но кнопка имеет неправильную форму, и я хочу, чтобы на нее можно было нажимать только тогда, когда лежащее в основе прямоугольное изображение непрозрачно.
Поэтому я реализовал OnTouchListener, который сверяет координаты события касания со значениями пикселей растрового изображения (как описано в первом ответе здесь: ссылка). Это работает с точки зрения логики, определяющей, была ли нажата кнопка, но теперь изображение кнопки больше не меняется на нажатое изображение.
Вот что у меня есть:
XML-файл селектора:
Частично прозрачный ImageButton в макете:
В действии:
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
...
ImageButton startCallButton = (ImageButton) this.findViewById(R.id.dashboardStartCallButton);
startCallButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return OnStartCallButtonTouch(v,event);
}
});
}
public boolean OnStartCallButtonTouch(View v, MotionEvent event)
{
Bitmap TheBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.button_start_call_normal);
int eventPadTouch = event.getAction();
int iX = (int) event.getX();
int iY = (int) event.getY();
switch (eventPadTouch) {
case MotionEvent.ACTION_DOWN:
if (iX>=0 & iY>=0 & iX