2

我创建了一个名为 Cell 的自定义视图,它绘制了一个正方形。在我的活动中,我创建了一个二维单元格数组,因此给出了一个网格结构。现在这样做的原因是,我希望单个单元格根据它们具有的某些值来响应我的点击。例如,每个单元格都有一个布尔值,基于真或假,我将为单元格着色。我尝试先用一个单元格进行此操作。但奇怪的是,即使我在单元格外部单击,也会触发单击事件。更多信息:我在活动的 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);

}}

这是我正在尝试的一个更简单的版本。现在奇怪的是,虽然我添加了自定义视图的两个不同实例,但 onDraw() 只被调用一次(在退出活动的 onCreate() 时)。根据我的阅读,每个新视图渲染都会调用 onDraw() 。请在这方面启发我!

非常感谢!

4

2 回答 2

0

我想您没有将 onClickListener 设置为正确的布局。它有些如何设置为您想要的元素的父级。请为我们分享您的代码,以解决确切的问题。

于 2013-03-23T12:22:30.873 回答
0

即使我在单元格外部单击,也会触发单击事件。

可能您以某种方式将触摸事件转发到您的单元格,至少它正在接收它们。在您的视图的 onTouchEvent() 方法中决定它是单击(并触发单击侦听器)还是长按或拖动等。

但是,如果这不能帮助您识别问题,请发布一些代码。

于 2013-03-23T12:22:49.560 回答