Android Open Source - DroidDoesMusic Simple Gesture Filter






From Project

Back to project page DroidDoesMusic.

License

The source code is released under:

Copyright (C) 2011 by Michael Rose, Nick Hansen, Joe Zeimen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Soft...

If you think the Android project DroidDoesMusic listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.uid.DroidDoesMusic.UI;
/*from www .j  a v  a2 s  . co  m*/
import android.app.Activity;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.SimpleOnGestureListener;

public class SimpleGestureFilter extends SimpleOnGestureListener {

  public final static int SWIPE_UP = 1;
  public final static int SWIPE_DOWN = 2;
  public final static int SWIPE_LEFT = 3;
  public final static int SWIPE_RIGHT = 4;

  public final static int MODE_TRANSPARENT = 0;
  public final static int MODE_SOLID = 1;
  public final static int MODE_DYNAMIC = 2;

  private final static int ACTION_FAKE = -13; // just an unlikely number
  private int swipe_Min_Distance = 160;
  private int swipe_Max_Distance = 750;
  private int swipe_Min_Velocity = 110;

  private int mode = MODE_DYNAMIC;
  private boolean running = true;
  private boolean tapIndicator = false;

  private Activity context;
  private GestureDetector detector;
  private SimpleGestureListener listener;

  public SimpleGestureFilter(Activity context, SimpleGestureListener sgl) {

    this.context = context;
    this.detector = new GestureDetector(context, this);
    this.listener = sgl;
  }

  public void onTouchEvent(MotionEvent event) {

    if (!this.running)
      return;

    boolean result = this.detector.onTouchEvent(event);

    if (this.mode == MODE_SOLID)
      event.setAction(MotionEvent.ACTION_CANCEL);
    else if (this.mode == MODE_DYNAMIC) {

      if (event.getAction() == ACTION_FAKE)
        event.setAction(MotionEvent.ACTION_UP);
      else if (result)
        event.setAction(MotionEvent.ACTION_CANCEL);
      else if (this.tapIndicator) {
        event.setAction(MotionEvent.ACTION_DOWN);
        this.tapIndicator = false;
      }

    }
    // else just do nothing, it's Transparent
  }

  public void setMode(int m) {
    this.mode = m;
  }

  public int getMode() {
    return this.mode;
  }

  public void setEnabled(boolean status) {
    this.running = status;
  }

  public void setSwipeMaxDistance(int distance) {
    this.swipe_Max_Distance = distance;
  }

  public void setSwipeMinDistance(int distance) {
    this.swipe_Min_Distance = distance;
  }

  public void setSwipeMinVelocity(int distance) {
    this.swipe_Min_Velocity = distance;
  }

  public int getSwipeMaxDistance() {
    return this.swipe_Max_Distance;
  }

  public int getSwipeMinDistance() {
    return this.swipe_Min_Distance;
  }

  public int getSwipeMinVelocity() {
    return this.swipe_Min_Velocity;
  }

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

    final float xDistance = Math.abs(e1.getX() - e2.getX());
    final float yDistance = Math.abs(e1.getY() - e2.getY());

    if (xDistance > this.swipe_Max_Distance
        || yDistance > this.swipe_Max_Distance)
      return false;

    velocityX = Math.abs(velocityX);
    velocityY = Math.abs(velocityY);
    boolean result = false;

    if (velocityX > this.swipe_Min_Velocity
        && xDistance > this.swipe_Min_Distance) {
      
      if (e1.getX() > e2.getX()) // right to left
        this.listener.onSwipe(SWIPE_LEFT, (int)e1.getX(), (int)e1.getY());
      else
        this.listener.onSwipe(SWIPE_RIGHT, (int)e1.getX(), (int)e1.getY());

      result = true;
    } else if (velocityY > this.swipe_Min_Velocity
        && yDistance > this.swipe_Min_Distance) {
      
      return false;
//      if (e1.getY() > e2.getY()) // bottom to up
//        this.listener.onSwipe(SWIPE_UP);
//      else
//        this.listener.onSwipe(SWIPE_DOWN);
//
//      result = true;
    }

    return result;
  }

  @Override
  public boolean onSingleTapUp(MotionEvent e) {
    this.tapIndicator = true;
    return false;
  }

  @Override
  public boolean onDoubleTap(MotionEvent arg0) {
    this.listener.onDoubleTap();
    ;
    return true;
  }

  @Override
  public boolean onDoubleTapEvent(MotionEvent arg0) {
    return true;
  }

  @Override
  public boolean onSingleTapConfirmed(MotionEvent arg0) {

    if (this.mode == MODE_DYNAMIC) { // we owe an ACTION_UP, so we fake an
      arg0.setAction(ACTION_FAKE); // action which will be converted to an
                      // ACTION_UP later.
      this.context.dispatchTouchEvent(arg0);
    }

    return false;
  }

  static interface SimpleGestureListener {
    void onSwipe(int direction, int x, int y);

    void onDoubleTap();
  }

}




Java Source Code List

com.uid.DroidDoesMusic.UI.About.java
com.uid.DroidDoesMusic.UI.ControlView.java
com.uid.DroidDoesMusic.UI.LibraryAlbumView.java
com.uid.DroidDoesMusic.UI.LibraryArtistView.java
com.uid.DroidDoesMusic.UI.LibrarySongView.java
com.uid.DroidDoesMusic.UI.Main.java
com.uid.DroidDoesMusic.UI.NowPlaying.java
com.uid.DroidDoesMusic.UI.PlaylistSongView.java
com.uid.DroidDoesMusic.UI.Playlist.java
com.uid.DroidDoesMusic.UI.Preferences.java
com.uid.DroidDoesMusic.UI.QueueView.java
com.uid.DroidDoesMusic.UI.SimpleGestureFilter.java
com.uid.DroidDoesMusic.player.Player.java
com.uid.DroidDoesMusic.util.PlaylistManager.java