onclicklistener不适用于动态创建的customview

时间:2018-04-07 12:19:37

标签: android onclick onclicklistener

我有类StickerImageView,它可以扩展StickerView类和StickerView 的FrameLayout

现在我正在创建StickerImageView类的对象并将位图设置到其中..

StickerImageView iv_sticker;
iv_sticker = new StickerImageView(this);
iv_sticker.setImageBitmap(result);

并通过添加视图使其对屏幕可见

mainscreen_relativelayout.addView(iv_sticker);

现在我想在动态创建的视图(iv_sticker)上关闭吐司,所以我正在这样做

iv_sticker.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(getApplicationContext(),"i clicked",Toast.LENGTH_LONG).show();
    }
});

我也尝试过这个自定义视图iv_sticker

iv_sticker.setClickable(true);

当我使用OnTouchListener吐司出现但视图(iv_sticker)不再可移动时

iv_sticker.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP){
            Toast.makeText(CropActivity.this,"i clicked",Toast.LENGTH_LONG).show();
            // Do what you want
            return true;
        }
        return false;
    }
});

这是我点击贴纸时的日志

04-07 18:03:23.265 8208-8208/com.package.myappname V/com.knef.stickerView: sticker view action down
04-07 18:03:23.362 8208-8208/com.package.myappname V/PhoneWindow: debug app launch: MotionEvent.ACTION_UP
04-07 18:03:23.362 8208-8208/com.package.myappname V/com.knef.stickerView: sticker view action up

1 个答案:

答案 0 :(得分:0)

  

当我尝试ontouchevent时,吐司出现但贴纸不可移动   再

这是因为您已经消耗了触摸事件。从false方法返回onTouch(...),让框架再次为您处理。