【发布时间】:2014-02-26 13:56:05
【问题描述】:
我需要初始 x 和 y 值(从第一次触摸开始移动的点 ACTION_DOWN)以便计算 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);
}
有没有办法让我从event 或以某种方式获取初始触摸值 - 在其他地方,避免使用全局变量mInitialTouchX?
【问题讨论】:
-
没有。 MotionEvents 或多或少是 /dev/input* 事件的直接接口。这只是一系列彼此无关的事件。
-
使用私有变量有什么问题?
-
关闭记录:将它们声明为易失性。 (:
-
@RGraham 没有它的 访问修饰符。我只是想在
ListView的一行内移动/拖动/滑动一些视图,我对顶部的全局变量不太满意,它完全独立于没有关联的行 -
@3yanlis1bos 为什么
volatile在单线程环境中?据我所知,所有这些事件回调都在 UI 线程 中运行
标签: java android touch-event ontouchlistener