Создание неправильной формы ImageButton с различными состояниями кликов

Я создал ImageButton с селектором для нажатых и не нажатых состояний, и это прекрасно работает.

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

Поэтому я реализовал OnTouchListener, который проверяет координаты события касания по значениям пикселей растрового изображения (как описано в первом ответе здесь:ссылка на сайт). This works, in terms of the logic deciding if the button was pressed, but now the image of the button doesn't change to the pressed image anymore.

Вот что у меня есть:

Селектор xml файла:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:drawable="@drawable/button_start_call_pressed" />
    <item android:drawable="@drawable/button_start_call_normal" />
</selector>

Частично прозрачная кнопка ImageButton в макете:

<ImageButton
    android:id="@+id/dashboardStartCallButton"
    android:background="@null"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/start_call_button_selector"
     />

В Деятельности:

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<TheBitmap.getWidth() & iY<TheBitmap.getHeight()) {                 
                if (TheBitmap.getPixel(iX,iY)!=0) {
                    onStartCallButtonClicked(v); 
                    return false; 
                } 
            }
    }           
    return true;
}

Ответы на вопрос(2)

Ваш ответ на вопрос