2015-10-13 6 views
0

У меня есть две настраиваемые группы просмотра, которые реализуют onTouchListener для motionevent.Android MotionEvent: переключение между видами

Я использую framelayout, чтобы показать им обоим. Вторая группа просмотра меньше по размеру, чем первая. Итак, первый в фоновом режиме, а второй - на переднем плане.

Я хочу перетащить элемент для второй группы/группы просмотра в группу просмотра.

Проблема: При перетаскивании элемента на фоне ViewGroup (i.e mAwesomePager), я хочу ACTION_UP, чтобы срабатывать на втором ViewGroup (меньший) и ACTION_MOVE, чтобы срабатывать на первом ViewGroup, поэтому в основном touchEvent передается от меньшего ViewGroup к более крупный в фоновом режиме и MotionEvent продолжается без того, чтобы пользователь должен был взять палец с экрана, а затем снова вернуть его обратно.

Вот некоторые из полезного кода:

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    if (mRectOut == true) { 
     ev.setAction(MotionEvent.ACTION_UP); 
     mFrame.bringChildToFront(mAwesomePager); 
     //mAwesomePager.setClickable(true); 

     // Obtain MotionEvent object 
     long downTime = SystemClock.uptimeMillis(); 
     long eventTime = SystemClock.uptimeMillis() + 100; 
     // List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState() 
     int metaState = 0; 
     MotionEvent motionEvent = MotionEvent.obtain(
       downTime, 
       eventTime, 
       MotionEvent.ACTION_DOWN, 
       ev.getX(), 
       ev.getY(), 
       metaState 
     ); 
     mAwesomePager.getChildAt(mAwesomePager.mLastDragged).dispatchTouchEvent(motionEvent); 
    } 
//some more code here 

} 

Я пытаюсь имитировать выпалить на переднем плане зрения этой ev.setAction(MotionEvent.ACTION_UP);, теперь я хочу, вид фона, чтобы взять контроль над ощупь, а на ощупь удерживая перетаскиваемое изображение.

ответ

0

Изменение этого mAwesomePager.getChildAt(mAwesomePager.mLastDragged).dispatchTouchEvent(motionEvent);

этому

return mAwesomePager.dispatchTouchEvent(motionEvent);

в конце концов сделал трюк.

0

Взглянув документации метода onTouchEvent(), более конкретно его возвращаемого параметра:

возвратов
Правда, если событие было обработано, ложным иначе.

Если вы хотите, чтобы ваши события должны быть переданы Фоновым зрение, вы должны убедиться, что, когда ACTION_UP происходит, метод возвращает ложь так Android знает событие движения еще не было потребляется и должно быть передано в следующий вид в иерархии.

Вот основной фрагмент того, что нужно сделать:

public boolean onTouchEvent(MotionEvent ev) { 
    if (event.getAction() == MotionEvent.ACTION_UP) { 
     // handle ACTION_UP with the foreground view 
     return false; // event will be sent to the background view 
    } else { 
     // handle ACTION_MOVE with the foreground view 
     return true; // event will stop here 
    } 
} 

Имейте в виду, что ваш взгляд фон будет также необходимо реализовать сенсорную слушателя свою очередь, для того чтобы это произошло.

+0

Спасибо за ваш ответ. Я пытаюсь имитировать прикосновение в представлении переднего плана с помощью этого 'ev.setAction (MotionEvent.ACTION_UP);', теперь я хочу, чтобы фоновое представление принимало управление над прикосновением, в то время как прикосновение удерживает перетаскиваемое изображение. 'return false' завершает события касания для обоих представлений. –

+0

Предполагая, что вы продолжаете возвращаться, создается ли созданный motionEvent, отправляемый в фоновый режим? –