簡體   English   中英

使用 onTouchListener 時 Event.getX() 獲取錯誤值

[英]Event.getX() gets wrong values when using onTouchListener

這是第一個代碼:

btn1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v,MotionEvent event) {
                int x_cursor = (int) event.getX();
                x_initial_touch = event.getX();

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                         x_initial_touch = event.getX();
                         break;
                    case MotionEvent.ACTION_MOVE:
                       System.out.println(event.getX())
                       btn1.animate().translationX(x_cursor - x_initial_touch ).setDuration(0);
                       break;
                    
                }
                    return false;
                }
        });

這是第二個代碼:

btn1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v,MotionEvent event) {
                int x_cursor = (int) event.getX();
                x_initial_touch = event.getX();

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                         x_initial_touch = event.getX();
                         break;
                    case MotionEvent.ACTION_MOVE:
                       System.out.println(event.getX())
                       any_other_button.animate().translationX(x_cursor - x_initial_touch ).setDuration(0);
                       break;
                    
                }
                    return false;
                }
        });

在第一個代碼中,當我向左拖動按鈕時,打印的值是:57 56 57 55 57 54 57 53 等等......

在第二個代碼中,當我將按鈕拖到左側時,打印的值是:57 56 55 54 53 52 51 50 等等......(這非常好,也是我想要的)。 我的問題是為什么在第一個代碼中,當我嘗試通過觸摸並拖動它來拖動按鈕時, event.getX() 會后退一些然后繼續。 我問這個是因為你可以想象按鈕不會平滑移動,它會回來一毫秒以啟動 position。 希望你明白我想說什么。

編輯我已經使用event.getRawX();解決了這個問題而不是event.getX();

您的x_cursorx_initial_touch都等於event.getX() ,因此您的translationX調用的參數始終為零,這將重置初始 position。 因此,在每次移動之后,您都會獲得一個對應於重置初始 position 的事件。 如果你翻譯any_other_button ,那么當它的 position 被重置時,它不會將事件發送到btn1 ,所以在第二種情況下你看不到交錯的 57。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM