gpt4 book ai didi

android - SimpleOnGestureListener 的 onSingleTapUp 从未调用过

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:09 27 4
gpt4 key购买 nike

我创建了一个带有 onTouchListener 和手势检测器的自定义组件,我将自定义组件放在 MainActivity 的 xml 文件中,该文件还具有 onTouchEvent 和手势检测器。我想检测自定义组件上的单击和 MainActivity 上的长按,但触摸监听器似乎以某种方式交互并且从未检测到单击。

主要 Activity .java:

public class MainActivity extends ActionBarActivity {
private GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
detector = new GestureDetector(this, new LongPressDetector());
}

@Override
public boolean onTouchEvent(MotionEvent event) {
detector.onTouchEvent(event);
int action = event.getActionMasked();
switch (action){
case MotionEvent.ACTION_DOWN:{
Log.d("TouchEvent", "Action_Down at MainActivity.java");
break;
}
}
return super.onTouchEvent(event);
}

private class LongPressDetector extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onDown(MotionEvent e) {
Log.d("TouchEvent", "onDown at MainActivity.java");
return super.onDown(e);
}

@Override
public void onLongPress(MotionEvent e) {
Log.d("TouchEvent", "onLongPress at MainActivity.java");
super.onLongPress(e);
}
}
}

自定义 View .java:

public class CustomView extends RelativeLayout {
private GestureDetector detector;

public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}

private void init(Context c){
LayoutInflater layoutInflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.customview, this);
detector = new GestureDetector(c, new TapDetector());
this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
int action = event.getActionMasked();
switch (action){
case MotionEvent.ACTION_DOWN:{
Log.d("TouchEvent", "Action_Down at CustomView.java");
break;
}
}
return false;
}
});
}

private class TapDetector extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onDown(MotionEvent e) {
Log.d("TouchEvent", "onDown at CustomView.java");
return super.onDown(e);
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.d("TouchEvent", "onSingleTapUp at CustomView.java");
return super.onSingleTapUp(e);
}
}
}

最佳答案

如果您要响应点击,您还需要从 onDown 返回 true,默认情况下将返回 false(我在这里猜测)。

至少对我而言,在我确定 onDown 返回 true 之前,我没有收到对我的代码的 onSingleTapUp 调用。

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

我见过其他框架,其中只有在接受“向下”事件时才会传递“向上”事件,所以我假设这就是这里发生的事情。

关于android - SimpleOnGestureListener 的 onSingleTapUp 从未调用过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28427988/

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