2

正方形を描画するCellというカスタムビューを作成しました。私のアクティビティでは、セルの2D配列を作成して、グリッド構造を作成します。これは、個々のセルが持つ値に基づいてクリックに応答するようにするためです。たとえば、各セルにはブール値があり、trueとfalseに基づいてセルに色を付けます。最初に、1つのセルでこれを実行してみました。しかし、奇妙な部分は、セルの外側をクリックしてもクリックイベントがトリガーされることです。詳細情報:アクティビティのonCreateメソッドですべてのビューを作成しています。さらに情報が必要な場合はお知らせください。

よろしくお願いします!私は他の参考のために私の元の質問を編集すると思いました:)。

Activity  

onCreate() {
super.onCreate(savedInstanceState);
LinearLayout masterLayout = new LinearLayout(this);
LinearLayout.LayoutParams params;
params =  new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,     
LinearLayout.LayoutParams.MATCH_PARENT);
masterLayout.setLayoutParams(params);
addCells();
setContentView(masterLayout);
}

function addCells() {
for(int i =0; i<2;i++) {
Cell cell = new Cell(this,i);
LinearLayout.LayoutParams viewParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
cell.setLayoutParams(viewParams);
masterLayout.addView(cell);

cell.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
//Do Something here

}
});}}

Custom View :

Cell extends View {
boolean flag=false;
int cellNumber;
float xCoordinate=50;
float yCoordinate=50;

Cell(Context context, AttributeSet attrs) {
super(context, attrs);
}
Cell (Context context, int i) {
super(context);
cellNumber = i;
}

onDraw(Canvas c) {
paint.setColor(Color.RED);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.STROKE);
xCoordinate = xCoordinate + 40*cellNumber;
c.drawRect(xCoordinate,yCoordinate,xCoordinate+40,yCoordinate+40, paint);

}}

これは私が試していたはるかに単純なバージョンです。ここで奇妙なのは、カスタムビューの2つの異なるインスタンスを追加しているにもかかわらず、onDraw()が1回だけ呼び出されることです(アクティビティのonCreate()を終了するとき)。私が読んだところによると、新しいビューのレンダリングごとにonDraw()が呼び出されます。その前で私を教えてください!

どうもありがとう!

4

2 に答える 2

0

onClickListener を適切なレイアウトに設定していないと思います。必要な要素の親にどのように設定されているか。正確な問題に焦点を合わせるために、コードを共有してください。

于 2013-03-23T12:22:30.873 に答える
0

セルの外側をクリックしても、クリックイベントがトリガーされます。

おそらく、何らかの方法でタッチイベントをセルに転送し、少なくともそれらを受信して​​います。ビューの onTouchEvent() メソッドで、それがクリック (およびクリック リスナーを起動する) であるか、長いクリックまたはドラッグであるかなどを決定します。

ただし、問題の特定に役立たない場合は、コードを投稿してください。

于 2013-03-23T12:22:49.560 に答える