एंड्रॉइड में टच की स्थिति कैसे प्राप्त करें?


92

मुझे एंड्रॉइड में टच स्टार्ट पोजिशन (एक्स, वाई), टच मूव पोजिशन और स्क्रीन के टच एंड पोजिशन की जरूरत है।

जवाबों:


169
@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;
}

तीन मामले इतने हैं कि आप विभिन्न प्रकार की घटनाओं पर प्रतिक्रिया कर सकते हैं, इस उदाहरण में फिर से उंगली को दोहन या खींचना या उठाना।


7
तुम झूठे क्यों लौटते हो?
— डैनियल रेहानियान

1
सच की वापसी मूल्य का मतलब होगा कि स्पर्श घटना को संभाला गया था और यह घटना को प्रचार और इसके विपरीत होने से रोकेगा।
— चौकीदार

27

पूरक जवाब

दिया गया 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अन्यथा यह स्पर्श का उपभोग करेगा मत भूलना ।
— लीनोहोह

@lenooh, getRawX()और getRawY()श्रोता के लिए जोड़े जाने वाले किसी भी दृश्य पर स्पर्श स्थिति के पूर्ण निर्देशांक को वापस करना चाहिए। लेकिन आप सही हैं, यदि इसके शीर्ष पर एक और दृश्य है जो वापस आता है true, तो कोई भी निचला दृश्य स्पर्श घटनाओं के बारे में सूचित नहीं किया जाएगा।
— सूरगछ

Suragch: बिल्कुल। चूंकि मैं एक फ्रेम-आउट का उपयोग करता हूं, इसलिए मैंने "मैचपैरेंट" के लिए दृश्य सेट किया है getX()और getY()ठीक काम करता हूं (इसकी कोई आवश्यकता नहीं है getRawX/Y())।
— लीनोहोह

@Suragch वैसे भी स्पर्श रिकॉर्ड करने के लिए है, भले ही यह किसी अन्य दृष्टिकोण से कवर किया गया हो या बच्चों को बटन पसंद हो?
— विग्नेश कुमार

@vigneshkumar, विचारों को नीचे से स्पर्श घटनाओं के बारे में सूचित किया जाता है (मेरे उत्तर के तल पर लिंक देखें), ताकि आप इस घटना को रिकॉर्ड कर सकें onInterceptTouchEventऔर फिर वापस लौट falseसकें ताकि घटना सामान्य रूप से संसाधित हो।
— सुरगाच

10
@Override
    public boolean onTouch(View v, MotionEvent event) {
       float x = event.getX();
       float y = event.getY();
       return true;
    }

0

यहां कोलटिन शैली है, मैं अपने प्रोजेक्ट में इसका उपयोग करता हूं और यह बहुत अच्छी तरह से काम करता है:

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
    })
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.