2016-11-22 5 views
2

Я использовал обычай DragLinearLayout. Все дочерние элементы, добавленные с помощью addDragView(), перетаскиваются (взаимодействие с пользователем).
Я хочу, чтобы симулировать событие перетаскивания для нажатого вида (плавное перемещение в нижней части макета).
Имитировать плавное перемещение Событие программно

ACTION_DOWN -> ACTION_MOVE -> ACTION_UP 

Я пробовал этот код, но он не работал.

long downTime = SystemClock.uptimeMillis(); 
long eventTime = SystemClock.uptimeMillis(); 
float x = view.getLeft(); 
float y = view.getTop(); 
int metaState = 0; 
MotionEvent downEvent = MotionEvent.obtain(
          downTime, 
          eventTime + 1000, 
          MotionEvent.ACTION_DOWN, 
          x, 
          y, 
          metaState 
        ); 
view.dispatchTouchEvent(downEvent); 

MotionEvent moveEvent = MotionEvent.obtain(
          downTime, 
          eventTime + 1000, 
          MotionEvent.ACTION_MOVE, 
          x, 
          y + 300, 
          metaState 
        ); 
view.dispatchTouchEvent(moveEvent); 

MotionEvent upEvent = MotionEvent.obtain(
          downTime, 
          eventTime + 1001, 
          MotionEvent.ACTION_UP, 
          x, 
          y + 300, 
          metaState 
        ); 
view.dispatchTouchEvent(upEvent); 
+0

Вы нашли решение? – Gohan

ответ

0

У меня была та же проблема, мне пришлось моделировать список для перепроса.

После некоторой настройки я успешно выполнил работу.

Вот что я сделал: (overScrollDown() функция в Мой заказ ListView)

Вы можете увидеть подробности здесь, в этом gist. Также screencast

public void overScrollDown() { 
    post(new Runnable() { 
     @Override 
     public void run() { 
      final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_DOWN, getWidth()/2, getHeight()/2, 0); 
      dispatchTouchEvent(event); 
      event.recycle(); 
     } 
    }); 

    postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_MOVE, getWidth()/2, getHeight()/2, 0); 
      dispatchTouchEvent(event); 
      event.recycle(); 
     } 
    }, 50); 

    postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_MOVE, getWidth()/2, getHeight()/2 + 400, 0); 
      dispatchTouchEvent(event); 
      event.recycle(); 
     } 
    }, 100); 

    postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      final MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_UP, getWidth()/2, getHeight()/2 + 400, 0); 
      dispatchTouchEvent(event); 
      event.recycle(); 
     } 
    }, 3000); 
} 

КПП. операция прокрутки вниз может быть гладкой с более ACTION_MOVE Событие ..

Смежные вопросы