如何在android中禁用父对象的onTouch保留子对象的onTouch
我正在吃什么:如何在android中禁用父对象的onTouch保留子对象的onTouch,android,android-layout,ontouchlistener,Android,Android Layout,Ontouchlistener,我正在吃什么: 我在线性布局上有一个imageview。我想检测 imageview的onTouch 我不想使用onClick,因为我的实现需要 onTouchImageview是linearLayout的子级 发生了什么: @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); imgUsrClrId.
- 我在线性布局上有一个
。我想检测imageview
imageview的
onTouch
- 我不想使用
,因为我的实现需要 onTouchonClick
是linearLayout的子级Imageview
发生了什么:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
imgUsrClrId.setOnTouchListener(imgSourceOnTouchListener);
}
OnTouchListener imgSourceOnTouchListener= new OnTouchListener(){
@Override
public boolean onTouch(View view, MotionEvent event) {
Log.d("", "");
return true;
}};
- 当我从图像和中单击图像一时,会触发两个触摸事件
另一个来自
线性布局(父级)
问题:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
imgUsrClrId.setOnTouchListener(imgSourceOnTouchListener);
}
OnTouchListener imgSourceOnTouchListener= new OnTouchListener(){
@Override
public boolean onTouch(View view, MotionEvent event) {
Log.d("", "");
return true;
}};
- 如何禁用保留
Imageview的
onTouch
代码:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
imgUsrClrId.setOnTouchListener(imgSourceOnTouchListener);
}
OnTouchListener imgSourceOnTouchListener= new OnTouchListener(){
@Override
public boolean onTouch(View view, MotionEvent event) {
Log.d("", "");
return true;
}};
没有从不同视图生成多个触摸事件,所有触摸事件都来自相同的ImageView,我做了如下测试 有一个跟踪它所来自的viewID
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Log.i("Tag","ImageView ID :"+imageView.getId());
imageView.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
Log.i("Tag","OnTouch View ID :"+v.getId());
return true;
}
});
当您从onTouch返回true时,事件将被消耗
这是输出
ImageView ID :2131230721
OnTouch View ID :2131230721
OnTouch View ID :2131230721
OnTouch View ID :2131230721
触摸事件一次只为一个视图触发,在代码中,触摸事件是为imageview触发的,但正如我们所知,每个运动事件都会调用touchListener。ACTION\u DOWN、MotionEvent.ACTION\u UP和MotionEvent.ACTION\u MOVE。因此,如果您希望一次只触发一个事件,即MotionEvent.ACTION\u DOWN或MotionEvent.ACTION\u UP,请按以下方式编写:
@Override
public boolean onTouchEvent(MotionEvent ev) {
final int action = ev.getAction();
switch (action) {
// MotionEvent class constant signifying a finger-down event
case MotionEvent.ACTION_DOWN: {
//your code
break;
}
// MotionEvent class constant signifying a finger-drag event
case MotionEvent.ACTION_MOVE: {
//your code
break;
}
// MotionEvent class constant signifying a finger-up event
case MotionEvent.ACTION_UP:
//your code
break;
}
return true;
}
看看这个。。这可能有助于@Praveen。。。我需要
OnTouchListener()
,所以我无法使用该解决方案!如何将单击事件从生成两次减少为单个事件!你能告诉我这样做的目的吗?因为触摸事件真的是为了提供我们触摸数据,而不是一次。这是一个有点难看的解决方案,但你可以在每张图像上保留一个状态布尔值来指示它是否被触摸过,并且只在它还没有做事情时才行动,然后在完成后再次释放它。这应该是有效的,因为触摸事件发生的间隔为毫秒,忽略了第二个事件。@user3427079。。。这是一个解决方案&是的,它工作了……但是为什么onTouch事件会触发两次呢?有什么想法吗?不知道,你确定没有在项目上设置多个onclick吗?比如在XML和代码中,或者在代码的多个地方?