मैंने दबाए गए और दबाए गए राज्यों के लिए चयनकर्ता के साथ एक छवि बटन बनाया, और यह ठीक काम करता है।विभिन्न क्लिक राज्यों के साथ अनियमित आकार वाले छवि बटन बनाना
लेकिन बटन एक अनियमित आकृति है और मैं केवल यह क्लिक करने योग्य चाहते हैं, जहां अंतर्निहित आयताकार छवि गैर पारदर्शी है।
इसलिए मैंने एक ऑन टच लिस्टनर लागू किया जो बिटमैप के पिक्सेल मानों के खिलाफ टच इवेंट के समन्वय की जांच करता है (जैसा कि पहले उत्तर में वर्णित है: link)। यह तर्क करता है कि बटन दबाए जाने पर निर्णय लेने के संदर्भ में, लेकिन अब बटन की छवि अब दबाए गए चित्र में नहीं बदली है।
चयनकर्ता 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;
}
क्यों नहीं 'ऑनस्टार्टकॉलबटन टच (वी, घटना) वापस लौटें startCallButton.onTouch() '? –