Android手势onFling无法正常工作

时间:2012-05-03 01:28:27

标签: android gesture

我的onFling手势代码完美运行。然后我在方法中添加了一些if语句,并在Activity代码中进行了一些小的其他调整。 Plus在不同的PassGen类中编写了几个新方法。以及一些代码重新排序。

除了被他们调用之外,我没有添加带有手势的界面,但现在onFling手势甚至都不会触发。双击手势仍然有效。

日志中没有错误。

以下是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;
    }





}

编辑:

我将onTouchEvent移动到onCreate下方,现在它触发了onFling函数,但if语句不执行任何操作,尽管velocityX和velocityY分别为1410.8032和0.0,它们应该触发一个。它也没有检测到正确,向上或向下。只剩下

1 个答案:

答案 0 :(得分:0)

原来是代码顺序和if语句。我需要将onFling移回onTouchEvent以下,并在if语句中添加extra()以隔离&&&的