问题描述
|
我有一个需要像iPhone一样的onTouch滑动事件的应用程序。他们是
向上滑动。
刷下。
向左滑动。
向右滑动。
我实现了onTouch事件,如下所示。我正确地向左和向右滑动了动作。但这是实现向下和向上滑动动作的正确方法。
我的代码:
float downXValue,downYValue;
@Override
public boolean onTouchEvent(MotionEvent arg1) {
// Get the action that was done on this touch event
switch (arg1.getAction())
{
case MotionEvent.ACTION_DOWN:
{
// store the X value when the user\'s finger was pressed down
downXValue = arg1.getX();
downYValue = arg1.getY();
break;
}
case MotionEvent.ACTION_UP:
{
// Get the X value when the user released his/her finger
float currentX = arg1.getX();
float currentY=arg1.getY();
// going backwards: pushing stuff to the right
if (downXValue < currentX)
{
Log.d(DEBUG_TAG,\"Right\");
}
// going forwards: pushing stuff to the left
if (downXValue > currentX)
{
Log.d(DEBUG_TAG,\"Left\");
}
break;
}
}
//GestureListener is called here...
//return gestures.onTouchEvent(event);
return true;
}
谢谢。
解决方法
关于什么...
if (downYValue < currentY)
{
Log.d(DEBUG_TAG,\"Down\");
}
确定要编写上面的代码吗?
编辑
好的,我相信你。您要做的基本上是:
double sizeInX = Math.abs(downXValue - currentX);
double sizeInY = Math.abs(downYValue - currentY);
if( sizeInX > sizeInY ){
// you better swipe horizontally
} else {
// you better swipe vertically
}
,这是我一段时间前写的一个侦听器,可以同时处理掉向下的swypes。我曾使用一个“ 3”变量来跟踪触摸位置。那里有一些不需要的代码,但是您会明白的:
LinearLayout tableM = (LinearLayout) findViewById (R.id.tableM);
tableM.setOnTouchListener(new OnTouchListener () {
public boolean onTouch(View view,MotionEvent event) {
if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
oldPosition = event.getY();
return true;
} else
if (event.getAction() == android.view.MotionEvent.ACTION_MOVE) {
if (event.getY() < oldPosition) {
tableIndexM++;
if (tableIndexM > (minsecs.length - 3)) {
tableIndexM = 0;
}
fillTable (rowM0,rowM1,rowM2,minsecs,tableIndexM);
}
else if (event.getY() > oldPosition) {
tableIndexM--;
if (tableIndexM < 0) {
tableIndexM = minsecs.length - 3;
}
fillTable (rowM0,tableIndexM);
}
oldPosition = event.getY();
return true;
}
return false;
}
});