অ্যান্ড্রয়েডে টাচ পজিশনটি কীভাবে পাবেন?


92

অ্যান্ড্রয়েডে আমার স্পর্শ প্রারম্ভিক অবস্থান (এক্স, ওয়াই), টাচ মুভ অবস্থান এবং স্ক্রিনের শেষের অবস্থান পাওয়া দরকার।

উত্তর:


170
@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
তুমি কেন মিথ্যে ফিরবে?
ড্যানিয়েল রেহানিয়ান

4
সত্যের ফেরতের মানটির অর্থ হ'ল স্পর্শ ইভেন্টটি পরিচালনা করা হয়েছিল এবং এটি ইভেন্টটিকে প্রচার এবং বিপরীতভাবে আটকাবে।
বিশৃঙ্খলাবিদ

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তবে কোনও নীচের মতামত স্পর্শ ইভেন্ট সম্পর্কে অবহিত করা হবে না।
সুরগাচ

সুরগচ: হুবহু যেহেতু আমি ফ্রেমলআউট ব্যবহার করি, তাই আমি ভিউটিকে "ম্যাচপ্যারেন্ট" তে সেট করে রেখেছি getX()এবং getY()ঠিক ঠিক কাজ করি (প্রয়োজন নেই getRawX/Y())।
লেনোহ

@ সুরাগচ কি অন্যভাবে দেখার দ্বারা আচ্ছাদিত বা বাটনগুলির মতো বাচ্চাদের থাকলেও স্পর্শ রেকর্ড করার আছে?
বিগনেশ কুমার

@ ভিগনেশকুমার, ভিউগুলি নীচে থেকে স্পর্শ ইভেন্ট সম্পর্কে অবহিত করা হয়েছে (আমার উত্তরের নীচে লিঙ্কটি দেখুন), যাতে আপনি ইভেন্টটি রেকর্ড করতে 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
    })
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.