我对 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/