मुझे एंड्रॉइड में टच स्टार्ट पोजिशन (एक्स, वाई), टच मूव पोजिशन और स्क्रीन के टच एंड पोजिशन की जरूरत है।
जवाबों:
@Override
public boolean onTouchEvent(MotionEvent event)
{
int x = (int)event.getX();
int y = (int)event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
}
return false;
}
तीन मामले इतने हैं कि आप विभिन्न प्रकार की घटनाओं पर प्रतिक्रिया कर सकते हैं, इस उदाहरण में फिर से उंगली को दोहन या खींचना या उठाना।
दिया गया OnTouchListener
private View.OnTouchListener handleTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i("TAG", "touched down");
break;
case MotionEvent.ACTION_MOVE:
Log.i("TAG", "moving: (" + x + ", " + y + ")");
break;
case MotionEvent.ACTION_UP:
Log.i("TAG", "touched up");
break;
}
return true;
}
};
कुछ दृश्य पर सेट करें:
myView.setOnTouchListener(handleTouch);
यह आपको स्पर्श घटना को उस दृश्य के सापेक्ष समन्वयित करता है, जिसे स्पर्श श्रोता को सौंपा गया है। दृश्य के ऊपरी बाएं कोने में है(0, 0) । यदि आप अपनी उंगली को दृश्य से ऊपर ले जाते हैं, तो yनकारात्मक होगा। यदि आप अपनी उंगली को बाईं ओर घुमाते हैं, तो xनकारात्मक होगा।
int x = (int)event.getX();
int y = (int)event.getY();
यदि आप डिवाइस स्क्रीन के ऊपरी बाएं कोने के सापेक्ष निर्देशांक चाहते हैं, तो कच्चे मान का उपयोग करें।
int x = (int)event.getRawX();
int y = (int)event.getRawY();
return falseअन्यथा यह स्पर्श का उपभोग करेगा मत भूलना ।
getRawX()और getRawY()श्रोता के लिए जोड़े जाने वाले किसी भी दृश्य पर स्पर्श स्थिति के पूर्ण निर्देशांक को वापस करना चाहिए। लेकिन आप सही हैं, यदि इसके शीर्ष पर एक और दृश्य है जो वापस आता है true, तो कोई भी निचला दृश्य स्पर्श घटनाओं के बारे में सूचित नहीं किया जाएगा।
getX()और getY()ठीक काम करता हूं (इसकी कोई आवश्यकता नहीं है getRawX/Y())।
onInterceptTouchEventऔर फिर वापस लौट falseसकें ताकि घटना सामान्य रूप से संसाधित हो।
यहां कोलटिन शैली है, मैं अपने प्रोजेक्ट में इसका उपयोग करता हूं और यह बहुत अच्छी तरह से काम करता है:
this.yourview.setOnTouchListener(View.OnTouchListener { _, event ->
val x = event.x
val y = event.y
when(event.action) {
MotionEvent.ACTION_DOWN -> {
Log.d(TAG, "ACTION_DOWN \nx: $x\ny: $y")
}
MotionEvent.ACTION_MOVE -> {
Log.d(TAG, "ACTION_MOVE \nx: $x\ny: $y")
}
MotionEvent.ACTION_UP -> {
Log.d(TAG, "ACTION_UP \nx: $x\ny: $y")
}
}
return@OnTouchListener true
})