我有一个自定义视图:
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);
我可以看到红色视图,但是没有触发点击。
这是怎么了?
答案 0 :(得分:2)
您需要在create上添加此行:
yourView.setOnClickListener(this);
基本上,当您添加此行时,您使用OnClickListener
将setOnClickListener(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();
}
}