onTouch,onLongClick一起在android系统(onTouch, onLongCli

2019-06-25 08:13发布

我'加入imageviews于母公司布局动态。 和我'中添加图像的onTouch /缩小操作进行变焦。 我想删除它的添加视图onLongPress。

img.setOnLongClickListener(longClickAction);
img.setOnTouchListener(touchAction); 

onLongPress:

OnLongClickListener longClickAction = new OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {

        parentLayout.removeView((ImageView)v);
        return false;
    }
};

onTouch:

OnTouchListener touchAction = new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        ImageView i = (ImageView)v;

        //perfrom zoom operation on touch of imageview
        zoom(i, event);
        return true; 

    }
};

只有触摸事件正在工作。 为什么? 我怎样才能兼得? 当IAM回事? 我应该怎么做,除去额外的看法? 请帮我。 提前致谢。

Answer 1:

onTouch总是要求你的观点,因为这是分派事件视图的初始状态。 当你长按你的观点,这仍然呼吁onTouch第一,因为你返回trueonTouch (这意味着你已经消耗这个事件,它不应该再分派),你不会得到onLongPress调用。 什么会做的伎俩是返回falseonTouch



Answer 2:

正如讨论@asenovm 的onTouch()总是被称为是分派事件视图的初始状态,但如果返回值onTouch ()然后双方将工作就像一个魅力和问题将得到解决。

编辑:我给用户的建议是,与其实现OnLongClickListener()和OnTouch()一起,尝试双击事件中使用OnLongClickListener()的函数。

您可以通过以下方式实现双击:

int i = 0;
btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    i++;
    Handler handler = new Handler();
    Runnable r = new Runnable() {

        @Override
        public void run() {
            i = 0;
        }
    };

    if (i == 1) {
        //Single click
        handler.postDelayed(r, 250);
    } else if (i == 2) {
        //Double click
        i = 0;
        ShowDailog();
    }


  }
});


Answer 3:

动态删除控件

可以帮助你

使用onTouch和onLongClick



Answer 4:

试试这个,它工作正常,我。

boolean isMoving= false;

yourView.setOnTouchListener(new View.OnTouchListener(){
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_MOVE) {
            isMoving = true;
            Log.i("isMoving:", "true");
        }
        if(event.getAction()==MotionEvent.ACTION_UP){
            isMoving=false;
            Log.i("isMoving:","false");
        }
        return false;
    }
});
yourView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        if(!isMoving){
            //do onlongclick event here
        }
        return true;
    }
});;


文章来源: onTouch, onLongClick together in android