Android OnTouchListener води до резки плъзгания

Имам бутон (променлива theButton в кода) и искам да мога да го плъзгам около неговия родителски изглед. Ето неговия OnTouchListener:

    OnTouchListener touchBListener = new View.OnTouchListener() 
    {       
        public float offsetX;
        public float offsetY;

        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {
            int theAction = event.getAction();
            switch (theAction)
            {
                case MotionEvent.ACTION_DOWN:
                    // Button down
                    offsetX = theButton.getX() - event.getX();
                    offsetY = theButton.getY() - event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    // Button moved
                    float newX = event.getX() + offsetX;
                    float newY = event.getY() + offsetY;
                    v.setX(newX);
                    v.setY(newY);
                    break;
                case MotionEvent.ACTION_UP:
                    // Button up
                    break;
                default:
                    break;
            }
            return true;
        }
    };
    theButton.setOnTouchListener(touchBListener);

Когато плъзгам бутона, той се движи в общата посока на плъзгане, но продължава да скача напред-назад между своето „текущо“ място и място по-рано в плъзгането. Скоковете са по-големи, когато съпротивлението върви в посока нагоре вдясно по някаква причина.

Възможно ли е „гладко“ плъзгане с помощта на OnTouchListener или трябва да използвам OnDragListener вместо това?


person Don Del Grande    schedule 11.08.2013    source източник
comment
Опитайте да поставите оператор за печат (log cat out, който е) на ACTION_MOVE, който отпечатва newX и newY за примерно плъзгане. Това може да е по-полезно за определяне какво точно се случва. Движете се в постоянна посока с постоянна скорост   -  person ghostbust555    schedule 11.08.2013


Отговори (1)


Намерих отговора в друга публикация - когато променя event.getX() и event.getY() на event.getRawX() и event.getRawY(), влаченията са плавни.

person Don Del Grande    schedule 24.08.2013