2013-03-14 17 views
16

Voglio creare un testo di modifica che vibra se l'input dato non è valido. ad esempio modifica il testo per il numero se il numero è sbagliato come se contenga 9 cifre rispetto a quando il testo di modifica diventa chiaro e vibra per qualche tempo come crearlo? grazie in anticipovibrazione di Edittext in Android

+0

Vibrazione vibe = (Vibratore) context.getSystemService (Context.VIBRATOR_SERVICE); ho usato questo bt non funziona –

risposta

30

Crea anim cartella in risorse e quindi creare file di nmaed shake.xml e incollare il codice qui sotto

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="0" android:toXDelta="10" android:duration="1000" 
    android:interpolator="@anim/cycle_7" /> 

e un altro file cycle_7.xml

<?xml version="1.0" encoding="utf-8"?> 
<cycleInterpolator xmlns:android="schemas.android.com/apk/res/android" android:cycles="7" /> 

e poi nel file java

if(invalid)//check your input 
{ 
    Animation shake = AnimationUtils.loadAnimation(Login.this, R.anim.shake); 
    editText.startAnimation(shake); 
} 
+0

che cos'è cycle_7 ?? –

+0

crea cycle_7.xml nella tua cartella anim e incolla questo codice Priya

+0

funziona adesso? – Priya

4

Per la vibrazione utilizzare il seguente codice.

Vibrator vibe = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 

Quindi, nel metodo Listener OnTextChanged utilizzare il seguente codice.

vibe.vibrate(50); // 50 is time in ms 

E non dimenticare che è necessario per aggiungere l'autorizzazione al manifesto (dopo il tag </application>):

<uses-permission android:name="android.permission.VIBRATE" /> 
0

Si dovrebbe aggiungere questo listener per EditText per la convalida desiderata,

editText.addTextChangedListener(new TextWatcher() { 

      public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // Write your logic here 
        if(condition satisfy) 
        // call vibrate(); 
      } 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
      } 
      public void afterTextChanged(Editable s) { 

      } 
     }); 



     public void vibrate() 
     { 
       Vibrator vibrate= (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE) ; 
          vibrate.vibrate(50); 
     } 
8

Se qualcuno è alla ricerca di un metodo per fare ciò che @Priya suggerito programmaticamente, quindi puoi provare questo.

public TranslateAnimation shakeError() { 
     TranslateAnimation shake = new TranslateAnimation(0, 10, 0, 0); 
     shake.setDuration(500); 
     shake.setInterpolator(new CycleInterpolator(7)); 
     return shake; 
} 

E poi:

myEditText.startAnimation(shakeError()); 
+2

Questo sembra più pulito rispetto a quello XML. – kanudo

0

Crea shake.xml nella cartella anim

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate 
     android:fromXDelta="-10" 
     android:toXDelta="10" 
     android:repeatCount="5" 
     android:repeatMode="reverse" 
     android:interpolator="@android:anim/linear_interpolator" 
     android:duration="70" /> 
</set> 

Dopo questo aggiungere animazioni per il tasto. Ho scritto questo codice in Kotlin per semplicità.

button.setOnClickListener { 
     button.startAnimation(AnimationUtils.loadAnimation(context, R.anim.shake) 
}