CustomView上的Onclicklistener无法正常工作

时间:2019-04-05 08:06:27

标签: android view onclicklistener

我有一个自定义视图:

public class GalleryView extends View implements View.OnClickListener {

    private CallBackHandler callBackHandler;
    Paint myPaint = new Paint();

    public GalleryView(Context context, CallBackHandler callBackHandler) {
        super(context);
        this.callBackHandler = callBackHandler;
    }

    public GalleryView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        myPaint.setColor(Color.RED);
        canvas.drawPaint(myPaint);
    }

    @Override
    public void onClick(View view) {
        System.out.println("clicked !");
        callBackHandler.do();
    }
}

我将其添加到主要活动的linearLayout中:

linearLayout.addView(galleryView);

然后将布局设置为我的contantview:

setContentView(linearLayout);

我可以看到红色视图,但是没有触发点击。

这是怎么了?

2 个答案:

答案 0 :(得分:2)

您需要在create上添加此行:

yourView.setOnClickListener(this);

基本上,当您添加此行时,您使用OnClickListenersetOnClickListener(this)分配给视图,这就是在onClick内部调用所分配的OnClickListener的onClick的方式。 / p>

答案 1 :(得分:0)

您可以通过如下设置OnClickListener来做到这一点:

public class GalleryView extends View implements View.OnClickListener {

    Paint myPaint = new Paint();
    private CallBackHandler callBackHandler;

    public GalleryView(Context context, CallBackHandler callBackHandler) {
        this(context, null, callBackHandler);
    }

    public GalleryView(Context context, AttributeSet attributeSet, CallBackHandler callbackHandler) {
        super(context, attributeSet);
        this.callBackHandler = callbackHandler;
        initialize();
    }

    private void initialize() {
        setOnClickListener(this);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        myPaint.setColor(Color.RED);
        canvas.drawPaint(myPaint);
    }

    @Override
    public void onClick(View view) {
        System.out.println("clicked !");
        callBackHandler.do();
    }
}