gpt4 book ai didi

Android:禁用屏幕点击按钮

转载 作者:行者123 更新时间:2023-11-29 00:06:00 28 4
gpt4 key购买 nike

我想在用户单击屏幕时禁用显示的按钮。我目前在我的 MainActivity 和提到的按钮上有一个 ViewPager。

我必须使用哪个监听器才能获取单击事件以及我必须将其“放置”到哪里,这样它才不会覆盖我在 viewPager 中的滑动手势? (我试图在我的 viewPager 上放置一个 onTouchListener,它确实有效,但显然我不能再滑动了)

我的说明代码(请保持温和,我是 Android 的新手 :)):

public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener{ 
(some Code, onCreate etc...)
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = MotionEventCompat.getActionMasked(event);

switch(action) {
case (MotionEvent.ACTION_DOWN) :
Log.d(DEBUG_TAG, "Action was DOWN");
return true;
case (MotionEvent.ACTION_MOVE) :
Log.d(DEBUG_TAG,"Action was MOVE");
return true;
case (MotionEvent.ACTION_UP) :
triggerButtons();
Log.d(DEBUG_TAG,"Action was UP");
return true;
case (MotionEvent.ACTION_CANCEL) :
Log.d(DEBUG_TAG,"Action was CANCEL");
return true;
case (MotionEvent.ACTION_OUTSIDE) :
Log.d(DEBUG_TAG,"Movement occurred outside bounds " +
"of current screen element");
return true;
default :
return super.onTouchEvent(event);
}
}

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

@Override
public void onShowPress(MotionEvent e) {

}

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

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}

@Override
public void onLongPress(MotionEvent e) {

}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}

如您所见,当用户在触摸/点击发生后抬起手指时,我希望我的“triggerButtons”被触发。我需要在我的 onCreate 中分配什么监听器才能完成这项工作?

(如果你也知道我怎么听doubleTap,那就太好了!)

编辑:

我已经添加了

View.OnTouchListener mOnTouchListener; 
GestureDetector mGestureDetector;

这是我在 MainActivity 的 onCreate 中添加的:

mOnTouchListener = new View.OnTouchListener() { 
@Override public boolean onTouch(View v, MotionEvent event) {
mGestureDetector.onTouchEvent(event);
return false;
}
};

mViewPager.setOnTouchListener(mOnTouchListener); 

解决方法:

在onCreate中:

mOnTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
touchEventDecider(event);
return false;
}
};

方法 touchEventDecider:

private boolean touchEventDecider(MotionEvent event) {
int action = MotionEventCompat.getActionMasked(event);

switch(action) {
case (MotionEvent.ACTION_DOWN) :
Log.d(DEBUG_TAG, "Action was DOWN");
return true;
case (MotionEvent.ACTION_MOVE) :
Log.d(DEBUG_TAG,"Action was MOVE");
return true;
case (MotionEvent.ACTION_UP) :
triggerButtons();
Log.d(DEBUG_TAG,"Action was UP");
return true;
case (MotionEvent.ACTION_CANCEL) :
Log.d(DEBUG_TAG,"Action was CANCEL");
return true;
case (MotionEvent.ACTION_OUTSIDE) :
Log.d(DEBUG_TAG,"Movement occurred outside bounds " +
"of current screen element");
return true;
default :
return super.onTouchEvent(event);
}
}

最佳答案

OnTouchListener 添加到您的 ViewPager。在 TouchListeneronTouchEvent 方法中,将每个事件传递给您的 GestureDetector 并返回 false。在 GestureDetector 中,在 onDown 中返回 true 并只保留 onSingleTapUp

您的问题是您通过返回 true 消耗了 onTouchEvent 方法中的每个触摸事件,因此事件不会到达您的 ViewPager不可滚动。

编辑:如果您想在不使用 GestureDetector 的情况下自己识别单击,则只需将 OnTouchListener 附加到您的 ViewPager 就像你所做的那样,但不要忘记在 onTouchEvent 方法中返回 false

关于Android:禁用屏幕点击按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752492/

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