2013-10-24 7 views
10

Mam siatkę 66 widoków, a jeśli widok zostanie dotknięty lub przeciągnięty/przeniesiony, chciałbym zmienić jego kolor tła.Ustal, który widok jest aktualnie dotykany, gdy użytkownik przesuwa palec

Zgaduję, że muszę umieścić odbiornik dotykowy w nadrzędnej grupie ViewGroup, ale jak określić, który widok podrzędny jest przeciągany/przenoszony?

+0

można proszę podzielić się rozwiązanie tego problemu. Ponieważ chciałem zrobić podobny rodzaj zadania. – Anmol

+0

@Anmol Patrz zaakceptowana odpowiedź poniżej. – bgolson

Odpowiedz

11

Znaleziono moją odpowiedź tutaj:

Android : Get view only on which touch was released

Wygląda na to trzeba pętli poprzez widoków podrzędnych i bij wykrywania ręcznie, aby dowiedzieć się, jakie zobaczyć dotyk jest obecnie ponad.

Czy ta nadrzędnymi dispatchTouchEvent na LinearLayout dominującej:

LinearLayout parent = new LinearLayout(this.getActivity()){ 
    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev) { 
     int x = Math.round(ev.getX()); 
     int y = Math.round(ev.getY()); 
     for (int i=0; i<getChildCount(); i++){ 
      LinearLayout child = (LinearLayout)row.getChildAt(i); 
      if(x > child.getLeft() && x < child.getRight() && y > child.getTop() && y < child.getBottom()){ 
       //touch is within this child 
       if(ev.getAction() == MotionEvent.ACTION_UP){ 
        //touch has ended 
       } 
      } 
     } 
     return true; 
    } 
} 
1

nie testowano, ale ja sądzę, że można zrobić coś podobnego do: ScrollView Inside ScrollView

parentView.setOnTouchListener(new View.OnTouchListener() { 

       public boolean onTouch(View v, MotionEvent event) { 
        Log.v(TAG,"PARENT TOUCH"); 
        findViewById(R.id.child).getParent().requestDisallowInterceptTouchEvent(false); 
        return false; 
       } 
      }); 
      childView.setOnTouchListener(new View.OnTouchListener() { 

       public boolean onTouch(View v, MotionEvent event) 
       { 
        Log.v(TAG,"CHILD TOUCH"); 
        // Disallow the touch request for parent on touch of child view 
        v.getParent().requestDisallowInterceptTouchEvent(true); 
        return false; 
       } 
      }); 

może po prostu zapętlenie poprzez wszystkie childViews, ustawienie OnTouchListener.

+0

Dzięki za odpowiedź. Problem polega na tym, że dziecko uruchomi się tylko wtedy, gdy dotyk zaczyna się w widoku. Nie reaguje na przeciąganie. Znalazłem rozwiązanie i napisałem powyżej. Dzięki jeszcze raz! – bgolson

Powiązane problemy