पर लांग टच मैं एंड्रॉइड पर एक गेम बना रहा हूं और मुझे कुछ क्रियाएं करने की ज़रूरत है जब उपयोगकर्ता स्क्रीन पर एक लंबी प्रेस का प्रयास करते हैं। दुर्भाग्यवश मुझे कस्टम सर्फेस व्यू के साथ सीधे काम करने वाली कोई भी विधि नहीं मिली है, मुझे यह बताने में संकोच न करें कि ऐसी विधि मौजूद है या नहीं?सतह दृश्य (एंड्रॉइड)
इसलिए मैंने ऑन टच इवेंट श्रोता से एक लंबे स्पर्श का पता लगाने और कार्यान्वित करने का निर्णय लिया।
यहाँ मेरी कोड है:
@Override
public boolean onTouch(View v, MotionEvent event)
{
long touchDuration = 0;
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
//Start timer
touchTime = System.currentTimeMillis();
}else if (event.getAction() == MotionEvent.ACTION_UP)
{
//stop timer
touchDuration = System.currentTimeMillis() - touchTime;
if (touchDuration < 800)
{
onShortTouch(event,touchDuration);
}else
{
onLongTouch(event,touchDuration);
}
}
}
return true;
यह काम करता है, लेकिन मैं अगर प्रेस एक लंबे प्रेस था या नहीं उपयोगकर्ता फोन को छू बंद हो जाता है केवल जब पता लगा सकते हैं। तो यह वही नहीं है जो मैं चाहता हूं। अगर मैं पहली बार स्क्रीन को छूता हूं तो एक टाइमर शुरू होता है तो एक बार 800 एमएस लांग टच() विधि को समाप्त कर दिया जाता है। दूसरे शब्दों में, मैं यह जांचना नहीं चाहता कि ACTION_DUP से ACTION_UP के बाद कितना समय बीत चुका है। मेरा मानना है कि मुझे कहा टाइमर के लिए धागे का उपयोग करना चाहिए, लेकिन मैं इसे काम नहीं कर सकता। निम्न कोड का उपयोग करते समय, जैसे ही मैं स्क्रीन को स्पर्श करता हूं, डीबग संदेश प्रदर्शित होता है:
@Override
public boolean onTouch(View v, MotionEvent event)
{
long touchDuration = 0;
TouchThread touchThread = new TouchThread();
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
//Start timer
touchTime = System.currentTimeMillis();
touchThread.setEvent(event);
touchThread.run();
}
return true;
}
private class TouchThread extends Thread
{
public MotionEvent event = null;
public void setEvent(MotionEvent e)
{
event = e;
}
@Override
public void run()
{
long startTime = System.currentTimeMillis();
long time = 0;
while(event.getAction() == MotionEvent.ACTION_DOWN)
{
time = System.currentTimeMillis() - startTime;
if(time > 800)
{
System.out.println("LOOONG CLICK!!");
return;
}
}
}
}
क्या किसी को कोई विचार है? एक अन्य समाधान का भी स्वागत किया जाएगा।
धन्यवाद। , http://developer.android.com/reference/android/view/GestureDetector.html
मैं का उपयोग कैसे करें यह निर्माता में एक GestureDetector उदाहरण बनाने के लिए है, विधियों मैं में दिलचस्पी रखता हूँ लागू: