0

いくつかのカスタム ビューで相対レイアウトを使用しています。各カスタム ビューは、独自のキャンバスに描かれた色付きの正方形です。各カスタム ビューに clicklistener を追加したいと考えています。すべてのビュー (clicklistener を使用) をレイアウトに追加すると、最後に追加されたカスタム ビューのみが、四角形の横をクリックしてもクリック可能になります。おそらく問題は、このビューのキャンバスが他のキャンバスと重なっていることです。各ビューの背景を黒に設定することで確認できます。--> 最後のビューのみが黒い背景で表示されます。どうすればその問題を回避できますか(オンタッチと座標リクエストを使用せずに)、使用していない透明なキャンバスを削除するにはどうすればよいですか?

編集:

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));
            }

編集:「ビューの絶対位置を設定する」がうまくいきました!

4

0 に答える 0