2016-04-12 14 views
0

Bazı TextView'um var ve ACTION_DOWN işlemi gerçekleştikten sonra parmakları/nesneler/sınırlarını girdiğinde arka planlarının kırmızıya dönmesini istiyorum.Başka bir TextView Sınırı mı sürükleyin/tutun/Girin?

Dokunma dinleyicisiyle denedim ancak çalışmaz, çünkü tıklatıldıktan sonra (Yalnızca ACTION_DOWN) TextView öğelerinden biri ve sürükleyin, TextView'ın geri kalanı kırmızıya dönmez (yalnızca ilk ACTION_DOWN gerçekleştiğinde, kırmızı arka plana dönüşüyor). Tüm TextView uygulamasını OnTouch dinleyicisine ekledim ve ACTION_MOVE da denedim, ancak yine de sonuç yok.

Herkes yardımcı olabilir? Teşekkürler. Bu sorunun Touch (not click) listener

public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_MOVE: 
      if (selectMode == 0) { 
       v.setBackgroundColor(Color.WHITE); 
      }else{ 
       v.setBackgroundColor(Color.RED); 
      } 
      return true; 
     case MotionEvent.ACTION_DOWN: 
      if (selectMode == 0) { 
       selectMode = 1; 
      }else{ 
       selectMode = 0; 
      } 
      return true; 
    } 
    return true; 
} 
+0

Kaç tane metin görünümünüz var? Sorunu anlayamadım. Plase, XML düzenini sağlayın – Leonardo

+1

Düğme işlevselliğini uygulamaya çalışıyor musunuz? parmak hareket ettikçe/çarptığında/sınırlarını girdiğinde kırmızıya dönün. Görüşünüzün parmağınızla reaksiyona girmesini istiyorsanız - sınırların ne olduğunu bilmek zorundasınız. Ardından görüşünüze bir dokunma dinleyicisine saldırın ve parmağınızın konumunu izleyin. Parmakların sınırları içerisine koyar koymaz - KIRMIZI bir şey açın. Bu yardımcı olur umarım. –

+0

Yup, yapmaya çalıştığım şey bu. Çözümü zaten buldum, yorumunuz için teşekkürler. – aLIEz

cevap

0

için

benzer çözüm bulundu.

Rect outRect = new Rect(); 
int[] location = new int[2]; 

// Attach all of the TextView to the onTouch listener 
public boolean onTouch(View v, MotionEvent event) { 
    // get the event x and y coordinate 
    int x = (int) event.getRawX(); 
    int y = (int) event.getRawY(); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_MOVE: 
      // My viewArray is list of TextView that I want to check that the "touch" hit/enter the TextView area 
      for (int i = 0; i < viewArray.length; i++) { 
       // Get the area of TextView 
       viewArray[i].getDrawingRect(outRect); 
       // Get the location of TextView 
       viewArray[i].getLocationOnScreen(location); 
       // Move the outRect to the TextView location 
       outRect.offset(location[0], location[1]); 
       // Check if the "touch" collide with the TextView area (outRect) 
       if (outRect.contains(x, y)){ 
        if (selectMode == 0) { 
         viewArray[i].setBackgroundColor(Color.WHITE); 
        } else { 
         viewArray[i].setBackgroundColor(Color.RED); 
        } 
       } 
      } 
      return true; 
     case MotionEvent.ACTION_DOWN: 
      if (selectMode == 0) { 
       selectMode = 1; 
      }else{ 
       selectMode = 0; 
      } 
      return true; 
    } 
    return true; 
}