2015-02-02 2 views
0

У меня есть пользовательский вид, такой как макет выдвижного ящика, у которого есть два ребенка. gridView, который включает (например, listview в drawerLayout), а другой - как контент. как ящик планшета, я хочу, если обнаружено касание и прокручивает сенсорный дескриптор в пользовательском макете (вызовите onTouchEvent()), но если касание - щелчок по элементам gridView gridView, обработайте его. поэтому i ovveride iterceptTouchEvent() и использовать GestureDEtector для обнаружения прокрутки, но это не сработало.обработка касания в customView как drawerLayout

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    mGestureDetector.onTouchEvent(ev); 
    if(isScrolling) { 
     isScrolling = false; 
     onTouchEvent(ev); 
     } 
    return false; 
} 

    public class touchDetector extends GestureDetector.SimpleOnGestureListener{ 


    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
     Log.d("*********","ONScroll"); 
     isScrolling = true; 
     return super.onScroll(e1, e2, distanceX, distanceY); 
    } 


} 

ответ

0

Вы делаете это способ усложнили TouchListener все, что вам нужно:

public boolean onTouch(View v, MotionEvent event) { 
    int viewId = v.getId(); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: { 
      switch (viewId) { 
       case R.id.viewId1: { 
        ... 
        break; 
       } 
       case R.id.viewId2: { 
        ... 
        break; 
       } 
      } 
      break; 
     } 
     case MotionEvent.ACTION_UP: { 
      switch (viewId) { 
       ... 
       } 
      } 
      break; 
     } 
    } 
    return false; 
} 

Таким образом, вы можете обрабатывать конкретные действия для конкретного зрения, и если вы хотите знать, если пользователь прокручивает просто сравнить MotionEvent-х getHistoricalX() или getHistoricalY() с getX() или getY() в ActionDown case, так что вы будете знать разницу между первоначальной сенсорной точкой и текущей сенсорной точкой

+0

спасибо, но если Oni nterceptTouchEvent return false Метод OnTouch() не предназначен для касания позиций childs. – mk72

+0

просто присоедините touchlistener к своей деятельности/фрагменту – Nickolaus