Java 如何在OnTouchListener中获得初始X,Y值(第一次触摸动作的值)
我需要初始x和y值(第一次触按动作开始移动的点),以便计算Java 如何在OnTouchListener中获得初始X,Y值(第一次触摸动作的值),java,android,touch-event,ontouchlistener,Java,Android,Touch Event,Ontouchlistener,我需要初始x和y值(第一次触按动作开始移动的点),以便计算deltaX和deltaY,如下所示 private float mInitialTouchX = Float.NaN; // # First touch temp var defined globally ... someView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v
deltaX
和deltaY
,如下所示
private float mInitialTouchX = Float.NaN; // # First touch temp var defined globally
...
someView.setOnTouchListener(new OnTouchListener() {
@Override public boolean onTouch(View v, MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_MOVE:
MoveViewHorizontally(v, event.getX(), mInitialTouchX);
break;
case MotionEvent.ACTION_DOWN:
mInitialTouchX = event.getX(); // # Set initial touch point
break;
case MotionEvent.ACTION_UP:
mInitialTouchX = Float.NaN; // # Reset initial touch point
break;
default: break;
}
return false;
}
});
private void MoveViewHorizontally(View v, float x, float initialTouchX)
{
int deltaX = (int)(x - initialTouchX);
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
layoutParams.leftMargin += deltaX;
v.setLayoutParams(layoutParams);
}
有没有一种方法可以从
事件
或其他地方获取初始触摸值,避免使用全局变量minitialtouch
?没有更好的方法。你做得对。事实上,如果你看一下的代码,你会发现他们做这件事的方式或多或少是相同的。没有。MotionEvents或多或少是/dev/input*事件的直接接口。这只是一系列相互之间没有关系的事件。使用私有变量有什么不对?记录外:将它们声明为volatile。(:@RGraham的access修饰符为Nothing。我只是想在ListView
的一行中移动/拖动/滑动某个视图,我对顶部的全局变量不太满意,它完全独立于没有association@3yanlis1bos为什么要在单线程环境中使用volatile就我所知,cks正在UI线程中运行know@SaroTaşciyan我正在使用您的代码片段,谢谢。我面临的一个问题是,当我在视图上滑动并停止滑动时,但不要将手指从视图上移开,它开始旋转。相反,它应该停止。