gpt4 book ai didi

android - 使用 SimpleOnGestureListener 实现 onUp 事件处理程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:45 25 4
gpt4 key购买 nike

我是 Android 编程的新手,最近我将注意力转向处理简单的手势。我知道 GestureDetector 和监听器,并且我成功地实现了我需要的简单手势(onDown、onFling、onScroll)。问题是我需要 SimpleOnGestureListener 类中不可用的 onUp 方法。我有一个 Activity 和一个自定义 View 。该 View 实际上并没有做任何事情,只是改变了背景颜色。我正在执行 Activity 中的所有事件处理。

我尝试的是在 View 的 onTouchListener 的 onTouch 方法中处理 ACTION_UP 事件,但这样 onFLing 将不起作用。我还在这里阅读了一个解决方案:OnUp event on GestureDetector ,它说我应该覆盖 onTouchEvent 但我不清楚我应该覆盖哪个 onTouchEvent,在哪里以及如何覆盖。我正在插入我当前的代码,也许它有帮助。 :)

public class Main extends Activity 
{
private GestureDetector gDetector;
public CustomView cView;
View.OnTouchListener gestureListener;

private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;

public Vibrator vibrator;

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
vibrator = (Vibrator)getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
gDetector=new GestureDetector(this, new gListener());
gDetector.setIsLongpressEnabled(true);
gestureListener=new View.OnTouchListener(){

public boolean onTouch(View v, MotionEvent event)
{
if(event.getAction()==MotionEvent.ACTION_UP)
{
cView.setBackgroundColor(Color.RED);
return true;
}
else
return gDetector.onTouchEvent(event);
}
};
cView=new CustomView(this);
cView.setOnTouchListener(gestureListener);
cView.setBackgroundColor(Color.BLACK);
cView.setLongClickable(true);
setContentView(cView);
}

class gListener extends GestureDetector.SimpleOnGestureListener
{

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
try
{
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
cView.setBackgroundColor(Color.WHITE);
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
cView.setBackgroundColor(Color.GRAY);
}
} catch (Exception e) {
// nothing
}
return false;
}

@Override
public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
vibrator.vibrate(30);
Log.d("Event", "MOVE");
return true;
}

@Override
public boolean onDown(MotionEvent e)
{
cView.setBackgroundColor(Color.BLUE);
Log.d("Event", "DOWN");
return true;
}

@Override
public boolean onSingleTapUp(MotionEvent e)
{
Log.d("Event", "UP");
return true;
}

}

最佳答案

试试这个方法...

@Override
public boolean onTouchEvent(MotionEvent me) {

Log.v("Touch", "ontouch: " + me.getAction());

if(me.getAction() == 0){
Log.v("Touch Down", "Down");
}
else if (me.getAction() == 1) {
Log.v("Touch Up", "Up");
}
else if (me.getAction() == 2) {
Log.v("touch Scroll", "Scroll");
}
boolean detectedUp = event.getAction() == MotionEvent.ACTION_UP;
if (!mGestureDetector.onTouchEvent(event) && detectedUp)
{
return onUp(event);
}
return true;
}

关于android - 使用 SimpleOnGestureListener 实现 onUp 事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14216086/

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