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

链接地址: http://www.djcxy.com/p/91228.html

上一篇: Android OnTouchEvent:调试InputEventConsistencyVerifier消息

下一篇: Android手势onFling无法正常工作