2012-05-03 4 views
0

Mon code gestuel onFling fonctionnait parfaitement. Ensuite, j'ai ajouté quelques instructions if à la méthode et apporté d'autres ajustements mineurs dans le code d'activité. Plus a écrit quelques nouvelles méthodes dans une classe différente PassGen. Ainsi que quelques ré-ordonnancement de code.Android Gesture onFling ne fonctionnait pas

Rien de ce que j'ai ajouté n'interface avec des gestes autres que d'être appelé par eux, mais maintenant le geste onFling ne se déclenche même pas. Le double geste de robinet fonctionne quand même.

Il n'y a pas d'erreurs dans le journal.

Voici le code de l'activité

package com.mystraldesign.memorable; 

import java.io.IOException; 
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.text.ClipboardManager; 
import android.view.GestureDetector; 
import android.view.GestureDetector.OnDoubleTapListener; 
import android.view.MotionEvent; 
import android.view.Window; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.mystraldesign.memorable.PassGen; 

public class MemorableActivity extends Activity implements android.view.GestureDetector.OnGestureListener,OnDoubleTapListener 
{ 
    //Define text views 
    private TextView textView1; 
    private TextView textView2; 
    private TextView textView3; 
    private TextView textView4; 
    private TextView textView5; 

    //Previous password holder 
    private String prevPass; 

    //Gesture Detectors 
    private GestureDetector gTap; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     gTap = new GestureDetector(this,(android.view.GestureDetector.OnGestureListener) this); 

     //Remove title bar 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.main); 




     //Define textView 
     textView1 = (TextView) findViewById(R.id.textView1); 
     textView2 = (TextView) findViewById(R.id.textView2); 
     textView3 = (TextView) findViewById(R.id.textView3); 
     textView4 = (TextView) findViewById(R.id.textView4); 
     textView5 = (TextView) findViewById(R.id.textView5); 

     //Load font file 
     Typeface type = Typeface.createFromAsset(getAssets(),"fonts/optima.ttf"); 

     //Set various textViews to font 
     textView1.setTypeface(type); 
     textView2.setTypeface(type); 
     textView3.setTypeface(type); 
     textView4.setTypeface(type); 

     prevPass = "Memorable"; 

    } 


    //Password call 
    public void newPass() 
    { 
     //Store Return 
     String retn = null; 
     PassGen passWord = new PassGen(); 


     //Generate password 
     try 
     { 
      retn = passWord.passwordGen(this); 
     } 
     catch (IOException e) 
     { 

      //Message about Error 
      Context context = getApplicationContext(); 
      CharSequence text = "Ooops Something Went Wrong!"; 
      int duration = Toast.LENGTH_SHORT; 

      //Display message 
      Toast toast = Toast.makeText(context, text, duration); 
      toast.show(); 

      textView1.setText("Memorable"); 


      e.printStackTrace(); 
     } 

     //Update prevpass 
     prevPass = textView1.getText().toString(); 

     textView1.setText(retn); 
    } 


    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
       float velocityY) 
    { 


     if(velocityX == 0.0 && velocityY > 0.0001) 
     { 
      //Call new password generation or generate random if set 
      if(textView4.getText() == "Memorable") 
      { 
       newPass(); 
      } 
      else if(textView4.getText() == "Random") 
      { 
       //create new password method 
       PassGen pass = new PassGen(); 

       //Set password 
       textView4.setText(pass.randomPassword()); 
      } 
     } 
     else if(velocityY == 0 && velocityX > 0.0001) 
     { 
      if(textView4.getText() == "Memorable") 
      { 
       textView4.setText("Random"); 
      } 
      else if(textView4.getText() == "Random") 
      { 
       textView4.setText("Memorable"); 
      } 
      else if(velocityX == 0.0 && velocityY > -0.0001) 
      { 
       textView4.setText(prevPass); 
      } 


      textView5.setText("VelocityX: " + velocityX + " VelocityY: " + velocityY); 
     } 

       return false; 
    } 


    //Method to copy password 
    public boolean onDoubleTapEvent(MotionEvent e) { 

     //clipboard shite 
     ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
     clipboard.setText(textView1.getText()); 

     //Message about coping 
     Context context = getApplicationContext(); 
     CharSequence text = "Password has been copied to clipboard."; 
     int duration = Toast.LENGTH_SHORT; 

     //Display message 
     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 

     return false; 
    } 



    /*--------------------------------------*/ 
    /*Additional geasture code below. */ 
    /* */ 
    /*J. Krawczyk 3/5/12*/ 
    /*--------------------------------------*/ 






    public boolean onTouchEvent(MotionEvent me){ 
     this.gTap.onTouchEvent(me); 
    return super.onTouchEvent(me); 
    } 

    public boolean onDown(MotionEvent e) { 

     return false; 
    } 




    public void onLongPress(MotionEvent e) 
    { 

    } 


    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
     float distanceY) { 

    return false; 
    } 


    public void onShowPress(MotionEvent e) { 

    } 

    public boolean onSingleTapUp(MotionEvent e) { 

    return false; 
    } 


    //Method to copy password - Depreciated 
    public boolean onDoubleTap(MotionEvent e) { 

    return false; 
    } 



    public boolean onSingleTapConfirmed(MotionEvent e) { 

    return false; 
    } 





} 

EDIT:

je me suis déplacé onTouchEvent au-dessous onCreate et maintenant il déclenche la fonction onFling mais si les déclarations ne font rien malgré la velocityX et velocityY étant respectivement 1410.8032 et 0.0 qui devrait en tirer un. En outre, il ne détecte pas correctement, haut ou bas. Seulement à gauche

Répondre

0

Il s'avère que c'était l'ordre du code et les instructions if. Je dois déplacer onFling redescendre au-dessous de onTouchEvent et ajouter supplémentaire() dans les déclarations si pour isoler le & &