Android onTouch总是显示对第二个事件的反应
在我的应用程序中,我在活动中有一个自定义视图。 为了检测触摸事件,我在这两个事件中都使用了onTouchEvent方法 自定义视图:onTouchEvent方法基本上只是标记被触摸的对象Android onTouch总是显示对第二个事件的反应,android,android-custom-view,touch-event,ontouchlistener,Android,Android Custom View,Touch Event,Ontouchlistener,在我的应用程序中,我在活动中有一个自定义视图。 为了检测触摸事件,我在这两个事件中都使用了onTouchEvent方法 自定义视图:onTouchEvent方法基本上只是标记被触摸的对象 @Override public boolean onTouchEvent(MotionEvent event) { int maskedAction = event.getActionMasked(); switch (maskedAction) {
@Override
public boolean onTouchEvent(MotionEvent event) {
int maskedAction = event.getActionMasked();
switch (maskedAction) {
case MotionEvent.ACTION_DOWN:
touchedXY[0] = event.getX();
touchedXY[1] = event.getY();
mMatrix.mapPoints(touchedXY); // this is just for
event.setLocation(touchedXY[0], touchedXY[1]); // rotation purposes
for(int i = 0; i < mPoints[i]; i++){
mPoints[i].isSelected(setIsSelected(touchedXY)); //using method to
//check if point
//is selected
}
break;
default:
return false;
}
invalidate();
return true;
}
活动:如果触摸到对象,则活动底部应显示一个线性布局,并显示触摸点的数量
int key = 0;
@Override
public boolean onTouch(View v, MotionEvent event) {
// get masked (not specific to a pointer) action
int maskedAction = event.getActionMasked();
switch (maskedAction) {
case MotionEvent.ACTION_DOWN:
List<AddressPoint> selectedPoints = Arrays.asList(mPoints);
if (key == 0) {
if (selectedPoints.size() > 0) {
key = 1;
test.setText(String.valueOf(selectedPoints.size()));
popup.setVisibility(View.VISIBLE);
} else {
test.setText(String.valueOf(selectedPoints.size()));
}
} else {
if (selectedPoints.size() > 0) {
test.setText(String.valueOf(selectedPoints.size()));
} else {
key = 0;
popup.setVisibility(View.GONE);
}
}
break;
default:
return false;
}
return false;
}
因此,它工作正常,但行为不符合要求。该活动似乎仅对第二个touchevent作出反应,并每秒钟刷新一次touchevent。
例如:
TouchEvent=4点->活动不显示弹出窗口。
TouchEvent=3点->活动显示带有数字4的弹出窗口
TouchEvent=1点->活动显示带有数字3的弹出窗口
.
. 等等
.
我希望你能帮助我,我感谢你的帮助 问题似乎很严重,因为在保存点之前,您的视图已重新绘制
因此,最好在onTouch onTouchEvent中保存点数,然后调用另一个函数来相应地设置文本。为什么要覆盖Activity.onTouchEvent?在我的CustomView中,我需要标记一些被触摸的点,在我的Activity中,我希望在触摸点时对布局做出反应。所以我必须重写它,因为它不会侦听更改。使用自定义侦听器接口,我不知道你的意思。我得到了正确的数据。我的应用程序正确地计算了点击点,只有LinearLayout以奇怪的顺序显示信息。当您在自定义视图中检测到任何触摸事件时,只需调用一些侦听器,就像按钮调用OnClickListener一样。onClick methodpopup就是自定义LinearLayout。我不能在我的弹出对象上使用此方法。请查看更改后的答案,希望对您有所帮助,我仍然不明白。我的意思是,LinearLayout弹出窗口会显示信息,但它的顺序很奇怪。我甚至没有画线性布局。我认为问题在于,在显示点后,您更改了数据,因此显示的顺序总是落后一步。什么是MPoint以及如何设置它们?最好只使用onTouchEvent函数保存点,然后调用另一个相应设置文本的函数。