java - 如何获得一个类来实现这个gestureRecogniser?

标签 java android interface polymorphism abstract-class

我对 Java 中的多态性和接口(interface)有点困惑。

基本上我想创建一个名为gestureRecogniser的类,它具有以下方法:

-onLeftwardsSwipe();

-onRightwardsSwipe();

-onUpwardsSwipe();

-onDownwardsSwipe();

gestureRecogniser 将根据需要调用这些方法。第二个类实现gestureRecogniser并指定必须对这些事件执行的操作。这在 Java 中可能吗?

这是我编写的类(class):

    public abstract class GestureRecogniser implements OnTouchListener {

    Activity activity;
    private float XWherePressed;
    private float XWhereReleased;
    private float YWherePressed;
    private float YWhereReleased;
    private static final int MINIMUM_DISTANCE_FOR_SWIPE = 100;


    public GestureRecogniser(Activity activity)
    {
        this.activity = activity;
    }

    public abstract void onLeftwardsSwipe();
    public abstract void onRightwardsSwipe();
    public abstract void onUpwardsSwipe();
    public abstract void onDownwardsSwipe();


    public boolean onTouch(View v, MotionEvent event)
    {
        switch(event.getAction())
        {
        case MotionEvent.ACTION_DOWN:

            this.XWherePressed = event.getX();
            this.YWherePressed = event.getY();

            break;

        case MotionEvent.ACTION_UP:

            this.XWhereReleased = event.getX();
            this.YWhereReleased = event.getY();

            float deltaX = XWhereReleased - XWherePressed;
            float deltaY = YWhereReleased - YWherePressed;

            if (Math.abs( deltaX ) > this.MINIMUM_DISTANCE_FOR_SWIPE)
            {
                //HORIZONTAL SWIPE
                if(deltaX > 0 )
                {
                    this.onRightwardsSwipe();
                    return true;
                }

                if(deltaX < 0)
                {
                    this.onLeftwardsSwipe();
                    return true;
                }

            }else return false;

            if (Math.abs( deltaY) > this.MINIMUM_DISTANCE_FOR_SWIPE)
            {
                //VERTICAL SWIPE
                if( deltaY < 0 )
                {
                    this.onDownwardsSwipe();
                    return true;
                }

                if ( deltaY > 0 )
                {
                    this.onUpwardsSwipe();
                    return true;
                }

            }else return false;

            break;

        }

        return false;
    }

}

最佳答案

我通过执行以下操作达到了预期的结果:

1 - 使用以下方法创建公共(public)接口(interface):

public interface OnSwipeListener 
{
    public void onUpwardsSwipe();
    public void onDownwardsSwipe();
    public void onLeftwardsSwipe();
    public void onRightwardsSwipe();
}

2 - 创建一个实现 onTouchListener 的类。该类的构造函数采用 OnSwipeListener 对象。 onTouch()方法根据需要调用方法:

public class SwipeRecogniser implements OnTouchListener {

    private OnSwipeListener onSwipeListener;
    private float XWherePressed;
    private float XWhereReleased;
    private float YWherePressed;
    private float YWhereReleased;
    private static final int MINIMUM_DISTANCE_FOR_SWIPE = 100;


    public SwipeRecogniser(OnSwipeListener onSwipeListener)
    {
        this.onSwipeListener = onSwipeListener;
    }

    public boolean onTouch(View v, MotionEvent event)
    {
        switch(event.getAction())
        {

        case MotionEvent.ACTION_DOWN:
            this.XWherePressed = event.getX();
            this.YWherePressed = event.getY();

            break;

        case MotionEvent.ACTION_UP:
            this.XWhereReleased = event.getX();
            this.YWhereReleased = event.getY();

            float deltaX = XWhereReleased - XWherePressed;
            float deltaY = YWhereReleased - YWherePressed;

            if (Math.abs( deltaX ) > this.MINIMUM_DISTANCE_FOR_SWIPE)
            {
                //HORIZONTAL SWIPE
                if(deltaX > 0 )
                {
                    onSwipeListener.onRightwardsSwipe();
                    return true;
                }

                if(deltaX < 0)
                {
                    onSwipeListener.onLeftwardsSwipe();
                    return true;
                }

            }
            else return true;

            if (Math.abs( deltaY) > this.MINIMUM_DISTANCE_FOR_SWIPE)
            {
                //VERTICAL SWIPE
                if( deltaY < 0 )
                {
                    onSwipeListener.onDownwardsSwipe();
                    return true;
                }

                if ( deltaY > 0 )
                {
                    onSwipeListener.onUpwardsSwipe();
                    return true;
                }

            }
            else return true;

            break;  
        }   
        return true;
    }
}

3 - 在自定义类中

public class MyClass extends Activity implements OnSwipeListener
{
 protected void onCreate(Bundle stuff)
 {
  //
  this.setOnTouchListener(new SwipeRecogniser(this));
 }

 public void onUpwardsSwipe(){/*methods*/}
 public void onDownwardsSwipe(){/*methods*/}
 public void onLeftwardsSwipe(){/*methods*/}
 public void onRightwardsSwipe(){/*methods*/}
}

关于java - 如何获得一个类来实现这个gestureRecogniser?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9484541/

相关文章:

java - 使用本地锁代替共享锁进行同步安全吗?

Java:如何实现 N-Queens?

android - 更改 MediaPlayer 上的缓冲区大小

Android 多 fragment 事务排序

c# - Activator.CreateInstance 有两个接口(interface)

iphone - 使 Storyboard 中的场景更长或在其中滚动

java - jGRASP (Java) 在 java 中输入公式

java - 如何在 API 级别 17 上使用 "setTitle"

java - MBassador 不支持界面消息

java - MongoDB java 驱动程序记录查询