का उपयोग करके राज्यों (कस्टम एक्सएमएल चयनकर्ता) को बदलने की जरूरत है। मुझे एक बटन ग्राफ़िक मिला है जिसे "प्रेस और होल्ड" कार्यक्षमता की आवश्यकता है, इसलिए ऑनक्लिक लिस्टनर का उपयोग करने के बजाय, मैं उपयोग कर रहा हूं onTouchListener ताकि एप्लिकेशनएंड्रॉइड पर "प्रेस एंड होल्ड" बटन को टचलिस्टर
MotionEvent.ACTION_DOWN,
और
MotionEvent.ACTION_UP
पर प्रतिक्रिया कर सकते हैं कि कैसे जल्दी से उन दो ईवेंट ट्रिगर कर रहे हैं पर निर्भर करता है, मैं दोनों के बीच के समय में एक "pressAndHoldHandler" चला सकते हैं।
वैसे भी, लंबी कहानी छोटी: मेरे पास एक ही ऐप में कई "मूल" बटन हैं जिन्हें प्रेस और पकड़ कार्यक्षमता की आवश्यकता नहीं है, इसलिए वे ऑनक्लिक लिस्टनर का उपयोग कर रहे हैं।
हर इन बटनों में से एक एक अपने स्वयं के एक्सएमएल चयनकर्ता फ़ाइल के साथ रेखांकन अनुकूलित किया गया है:
<?xml version="1.0" encoding="UTF-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:drawable="@drawable/btn_chicken_off" />
<item
android:state_enabled="true"
android:state_pressed="true"
android:drawable="@drawable/btn_chicken_s3" />
<item
android:state_enabled="true"
android:state_focused="true"
android:drawable="@drawable/btn_chicken_s2" />
<item
android:state_enabled="true"
android:drawable="@drawable/btn_chicken_off" />
</selector>
तो, समस्या यहाँ है: ऊपर चयनकर्ता onTouchListener के साथ पहुँचा नहीं होती है। केवल ऑनक्लिक लिस्टनर राज्य की परिवर्तनों को अपने स्वयं के विधि के ऑनक्लिक() सेक्शन में खींच देगा, इसलिए ये "प्रेस और होल्ड" बटन कभी भी राज्य को नहीं बदलते हैं। उपयोगकर्ता के लिए बहुत भयानक प्रतिक्रिया।
मैं वर्तमान में निम्न कार्य करके ACTION_DOWN के स्विच मामले और ACTION_UP अंदर से ऊपर के लिए मजबूर कर रहा हूँ:
if (action == MotionEvent.ACTION_DOWN) {
btn_chicken.setBackgroundResource(R.drawable.btn_chicken_s3);
}
else
if (action == MotionEvent.ACTION_UP) {
btn_chicken.setBackgroundResource(R.drawable.btn_chicken_off);
}
लेकिन यह एक हैक की तरह लगता है, और यह "ध्यान केंद्रित लेकिन नहीं दबाया" मंच कमी है।
कोई भी इस से पहले घूम गया?
यही मेरी समस्या थी। अच्छे विवरण के लिए धन्यवाद। – Suragch