Basılı ve basılı olmayan durumlar için bir seçici olan bir ImageButton oluşturdum ve bu iyi çalışıyor.Farklı tıklama durumlarıyla düzensiz şekilli ImageButton oluşturma
Ancak düğmenin düzensiz bir şekli var ve yalnızca alttaki dikdörtgen resmin saydam olmadığı yerlerde tıklanabilir olmasını istiyorum.
Bu yüzden, Touch olayının koordinatlarını Bitmap'in piksel değerlerine göre kontrol eden bir OnTouchListener uygulamıştım (burada ilk yanıtta açıklandığı gibi: link). Bu, düğmenin basılıp basılmadığına karar veren mantık açısından çalışır, ancak şimdi düğmenin görüntüsü artık basılan görüntüye değişmez. düzeninde
<?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>
Kısmen şeffaf ımagebutton:
Seçici xml dosyası: Bir Etkinlikte
<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;
}
neden olmasın OnStartCallButtonTouch (v, event) || startCallButton.onTouch() '? –