我创建了一个名为 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() 。请在这方面启发我!
非常感谢!