मैं पहले एक टैप ट्रिगर किए बिना डबल टैप का पता लगाना चाहता हूं। मैंने दो बार श्रोताओं को क्लिक करने की कोशिश की है लेकिन डबल बार पता चलने से पहले आपको हमेशा एक ऑनलिंग टापअप मिलता है, जो मुझे लगता है कि उचित है। लेकिन मेरे ऐप में, मैं वास्तव में एक क्लिक पर कॉलबैक नहीं चाहता हूं जब रास्ते पर डबल क्लिक होता है।एंड्रॉइड एकल टैप के बिना डबल टैप का पता लगाता है
मुझे एहसास है कि कोई ऐप भविष्य की भविष्यवाणी नहीं कर सकता है (या मैं वास्तव में समृद्ध होगा) लेकिन मैं सोच रहा था, बस एक क्लिक पर टाइमर लॉन्च करें और यदि कुछ समय के भीतर कोई डबल क्लिक नहीं है, तो एकल क्लिक करें । लेकिन ऐसा लगता है कि एक बार जब मैं टाइमर शुरू करता हूं और टाइमर चल रहा है, तो दूसरा टैप कभी भी एक ईवेंट उत्पन्न नहीं करता है। एआईएनसी कार्य का उपयोग करके मेरा कोड यहां है, मैंने इसे टाइमर के साथ भी आजमाया।
mGD = new GestureDetector(getContext(), new SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent ev) {
//Log.d("KitView", "onSingleTapUp "+ev.toString());
class DblTapTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
Log.d("KitView", "onPreExecute");
}
protected Void doInBackground(Void... args) {
Log.d("KitView", "doInBackground");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
Log.d("KitView", "onPostExecute");
doSigleTapAction();
mDblTapTask=null;
}
};
if(mDblTapTask==null) {
Log.d("KitView", "START TASK");
mDblTapTask = new DblTapTask();
mDblTapTask.execute();
} else {
Log.d("KitView", "TASK RUNNING");
doDoubleTapAction();
}
Log.d("KitView", "onSingleTapUp DONE");
return true;
} // end onSingleTapUp
}); // end new GestureDetector
इस उदाहरण में, मुझे पहले टैप पर बस सिंगलटैप पर ठीक है। मेरा टाइमआउट doInBackground में परीक्षण के लिए 1 सेकंड है इसलिए मेरे पास दूसरी टैप करने के लिए बहुत समय है। ध्यान दें कि Log.d ("KitView", "onSingleTapUp DONE"); तुरंत चलाता है मैं पहली टैप करता हूं, इसलिए SingleTapUp फांसी नहीं है।
समस्या यह है कि, 1sec के भीतर फिर से टैप करने से कुछ भी नहीं होता है। नींद खत्म होने के बाद औरपोस्टएक्सक्यूट चलने तक सिंगलटैप पर कोई कॉल नहीं है। तो Log.d ("KitView", "TASK रनिंग"); ऐसा कभी नहीं होता है जहां मैं डबल क्लिक बनाम एकल क्लिक का पता लगाऊंगा।
मुझे यकीन नहीं है कि क्यों एन्क्टास्क घटनाओं को अवरुद्ध कर रहा है, कोई विचार? धन्यवाद
http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html –