我正在使用带有几个自定义视图的相对布局。每个自定义视图都是一个彩色正方形,绘制在自己的画布上。我想为每个自定义视图添加一个 clicklistener。现在,当将所有视图(带有 clicklistener)添加到布局时,即使在正方形旁边单击,也只有最后添加的自定义视图是可点击的。也许问题在于这个视图的画布与其他画布重叠。我可以通过将每个视图的背景设置为黑色来看到这一点。--> 只有最后一个视图在黑色背景下可见。我怎样才能避免这个问题(不使用 ontouch 和坐标请求)我怎样才能删除我不使用的透明画布。
编辑:
public class StorageView extends View {
Paint paintedStorage = new Paint();
int sizeX,sizeY,koordX,koordY;
Storage storage;
public StorageView(Context context, Storage storage, double ratio) {
super(context);
this.koordX = (int)(storage.getKoordX()*ratio);
this.koordY = (int)(storage.getKoordY()*ratio);
this.sizeX = (int)(storage.getSizeX()*ratio);
this.sizeY = (int)(storage.getSizeY()*ratio);
this.storage = storage;
}
public void onDraw(Canvas canvas){
super.onDraw(canvas);
if(storage.getArticleList().isEmpty())
paintedStorage.setColor(Color.LTGRAY);
else
paintedStorage.setColor(Color.CYAN);
paintedStorage.setStrokeWidth(3);
canvas.drawRect(koordX, koordY, koordX+sizeX, koordY+sizeY, paintedStorage);
}
public Storage getStorage(){
return storage;
}
这在我的活动中:(StorageView 是我的正方形或矩形)
for (int i = 0; i < storageList.size(); i++) {
storageListView.add(new StorageView(context, storageList.get(i), ratio));
// storageListView.get(i).setBackgroundColor(Color.BLACK);
storageListView.get(i).setClickable(true);
storageListView.get(i).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {/*Do something (Toast)*/}});
relativeKoordLayout.addView(storageListView.get(i));
}
编辑:我明白了“设置视图的绝对位置”效果很好!