Android Gesture onFling not working
I had my onFling gesture code working perfectly. Then I've added some if statements to the method and make some minor other adjustments in the Activity code. Plus wrote a couple new methods in a different class PassGen. As well as some code re-ordering.
Nothing I added interfaces with gestures other than being called by them, but now the onFling gesture won't even fire. The double tap gesture stills works though.
There is no errors in the log.
Here is the code from Activity
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:
I moved onTouchEvent to below onCreate and now it fires the onFling function but the if statements don't do anything despite the velocityX and velocityY being 1410.8032 and 0.0 respectively which should fire one. Also it doesn't detect right, up or down. Only left
Turns out it was code order and if statements. I need to move onFling
back down to below onTouchEvent
and add extra () into the if statements to isolate the &&'s