gpt4 book ai didi

java - 通过触摸监听器让用户在屏幕上移动,但存在条件被多次调用的问题

转载 作者:行者123 更新时间:2023-11-30 00:23:08 24 4
gpt4 key购买 nike

I want to get user finger location on screen so 

执行一些操作,例如增加音量用户向上移动她的手指,但我面临的问题是我想在用户向上移动时运行的代码多次调用 甚至用户只需将手指放在屏幕上任何人都可以帮助我

layout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN: {
// store the X value when the user's finger was pressed down
downXValue = event.getX();
downYValue = event.getY();
Log.d("recording", "= " + downYValue);
break;
}

case MotionEvent.ACTION_MOVE: {
// Get the X value when the user released his/her finger
float currentX = event.getX();
float currentY = event.getY();
// check if horizontal or vertical movement was bigger

if (Math.abs(downXValue - currentX) > Math.abs(downYValue
- currentY)) {
Log.d("recording", "x");
// going backwards: pushing stuff to the right
if (downXValue < currentX) {
Log.d("recording", "right");

}

// going forwards: pushing stuff to the left
if (downXValue > currentX) {
Log.d("recording", "left");

}

} else {
Log.d("recording", "y ");

if (downYValue < currentY) {
Log.d("recording", "down");




}
}
if (downYValue > currentY) {
Log.d("recording", "up");




}
}
break;
}

}

return true;

}


});

谁能给点好的建议,我该怎么做

最佳答案

自定义手势监听器

import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;


public class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener {
private static final String TAG = "SimpleGestureListener";
private Listener mListener;

@Override
public boolean onDown(MotionEvent e) {
return true;
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.i(TAG,e1.toString()+"\n"+e2.toString());
Log.d(TAG,"distanceX = "+distanceX+",distanceY = "+distanceY);
if (mListener == null)
return true;

if (distanceX == 0 && Math.abs(distanceY) > 1){
mListener.onScrollVertical(distanceY);
}

if (distanceY == 0 && Math.abs(distanceX) > 1){
mListener.onScrollHorizontal(distanceX);
}
return true;
}


public void setListener(Listener mListener) {
this.mListener = mListener;
}

interface Listener{
/**
* left scroll dx >0
* right scroll dx <0
* @param dx
*/
void onScrollHorizontal(float dx);

/**
* upward scroll dy > 0
* downward scroll dy < 0
* @param dy
*/
void onScrollVertical(float dy);
}
}

用法

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private GestureDetector mDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SimpleGestureListener simpleGestureListener = new SimpleGestureListener();
simpleGestureListener.setListener(new SimpleGestureListener.Listener() {
@Override
public void onScrollHorizontal(float dx) {
Log.i(TAG,"horizontal = " +dx);
}

@Override
public void onScrollVertical(float dy) {
Log.i(TAG,"vertical = " +dy);
}
});
mDetector = new GestureDetector(this, simpleGestureListener);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
mDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}

您可以在您的应用程序中使用上述代码来跟踪:

  1. 左右滑动
  2. 自上而下滑动

关于java - 通过触摸监听器让用户在屏幕上移动,但存在条件被多次调用的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45903917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com