2017-02-22 3 views
2

J'ai un TextView, avec un événement onLongClickListener et OnClick, sur la tenue TextView, ses changements de couleur rouge, et sur la libération, sa couleur est censé changer au blanc.OnLongCLickListener ne fonctionne pas comme je l'ai besoin

Problème: Quand je détiens le TextView et déplacer mon doigt à l'extérieur de celui-ci tout en maintenant, et laisse mon doigt, sa couleur ne change pas au blanc.

XML

<TextView 
    android:layout_width="match_parent" 
    android:text="hello" 
    android:textColor="#ffff" 
    android:id="@+id/timer" 
    android:layout_height="wrap_content" 
    /> 

Java

final TextView t1 = (TextView) findViewById(R.id.timer); 
    t1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      t1.setTextColor(Color.WHITE); 

     } 
    }); 
    t1.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      t1.setTextColor(Color.RED); 
      return false; 
     } 
    }); 
+0

Avez-vous essayé de revenir sur votre vrai onLongClick()? – dave

+0

Vous devez utiliser OnTouchListener pour atteindre la fonctionnalité désirée –

+0

@Abhishec Kumar ma réponse vous aidera à résoudre votre problème^_^si vous avez besoin d'effacer quelque chose que vous pouvez demander –

Répondre

2

View.OnClickListener - Définition d'interface pour un rappel à invoquer lorsqu'une vue est cliqués. View.OnLongClickListener - Définition d'interface pour un rappel à être invoqué lorsqu'une vue est cliqués et a tenu.

Donc ce que vous dites est 100% vrai.Il devrait être rouge parce qu'il a été cliqué et maintenu comme vous l'avez fait.

Mais quand je détiens la vue du texte et déplace le doigt en dehors de la vue texte tout en maintenant, puis laisser mon doigt, il ne change de couleur à blanc

Vous avez donné la couleur blanche à la vue du texte quand il est seulement cliqué !! Si vous voulez obtenir ce blanc comme vous avez dit (quand on clique dessus et tenue), vous devez définir la couleur blanche dans OnLongClickListener

Au point si vous voulez détecter votre point de vue toucher et libérer et changer les couleurs liées à que vous devez utiliser OnTouchListener au lieu de clickListeners

View.OnTouchListener - définition d'interface pour un rappel à invoquer lorsqu'un événement tactile est envoyé à ce point de vue. Le rappel sera appelé avant l'événement tactile est donnée à la vue

 t1.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
        t1.setTextColor(Color.RED); // pressed state 
       break; 

       case MotionEvent.ACTION_UP: 
        t1.setTextColor(Color.WHITE); // Released state 
       break; 
      } 
      return true; 
     } 
    }); 
+0

cela a fonctionné, merci –

+0

@Abhishec Kumar je vous ai vu retourner faux si c'est pour des connaissances supplémentaires http://stackoverflow.com/questions/21578476/what-actually-happens-if-i-return-false-in-a-ontouchlistener –

0

Utilisez OnTouchListener cette façon, vous pouvez enregistrer le toucher vers le bas et les événements. MotionEvent case MotionEvent.ACTION_DOWN: définit la couleur au rouge lorsque l'utilisateur touche votre TextView et case MotionEvent.ACTION_UP: définit la couleur au blanc lorsque l'utilisateur lève le doigt sur le TextView.

final TextView t1 = (TextView) findViewById(R.id.timer); 


t1.setOnTouchListener(new View.OnTouchListener() 
    { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) 
     { 
     switch (event.getAction()) { 

     case MotionEvent.ACTION_DOWN: 
      t1.setTextColor(Color.RED); 
      break; 
     case MotionEvent.ACTION_UP: 
      t1.setTextColor(Color.WHITE); 
      break; 
    } 
return true; 
     } 
    }); 
+0

en ajoutant un onclick avec elle travaille –

+0

merci mon pote, pour le code –

0

Assigner un auditeur OnTouch et chercher MotionEvent.ACTION_DOWN et MotionEvent.ACTION_MOVE:

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     // Construct a rect of the view's bounds 
     rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom()); 
    } 

    if (event.getAction() == MotionEvent.ACTION_MOVE) { 
     if (!rect.contains(v.getLeft() + (int) event.getX(), v.getTop() + (int) event.getY())) { 
      // User moved outside bounds 
      t1.setTextColor(Color.WHITE); 
     } 
    } 
    return false; 
}