Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在OnTouchListener中获得初始X,Y值(第一次触摸动作的值)_Java_Android_Touch Event_Ontouchlistener - Fatal编程技术网

Java 如何在OnTouchListener中获得初始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

我需要初始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, 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我正在使用您的代码片段,谢谢。我面临的一个问题是,当我在视图上滑动并停止滑动时,但不要将手指从视图上移开,它开始旋转。相反,它应该停止。