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