我有一个自定义视图:
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);
我将布局设置为我的contentview:
setContentView(linearLayout);
我可以看到红色视图,但不会触发点击。
这有什么不对?
您可以通过简单地设置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();
}
}
你需要在create上添加这一行:
yourView.setOnClickListener(this);
基本上,当你添加这一行时你使用OnClickListener
将setOnClickListener(this)
分配给你的视图,而这就是在onClick
内部,调用指定的OnClickListener
的onClick。