我创建了一个名为Cell的自定义视图,它绘制了一个正方形。在我的活动中,我创建了一个2d单元格数组,因此给出了一个网格结构。现在的原因是,我希望单个单元格根据他们拥有的某些值来响应我的点击。比如说,每个单元格都有一个布尔值,并且基于true的假,我将为单元格着色。我尝试首先使用一个单元格。但奇怪的是,即使我在单元格外单击,也会触发click事件。 更多信息:我在活动的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()。请在这方面赐教我!
非常感谢!
答案 0 :(得分:0)
我想你没有将onClickListener设置为正确的布局。它的一些方法是如何设置为您想要的元素的父级。请分享您的代码,以便我们了解确切的问题。
答案 1 :(得分:0)
即使我在单元格外单击,也会触发click事件。
可能你以某种方式将触摸事件转发到你的手机,至少它正在接收它们。在视图的onTouchEvent()方法中,决定是单击(并点击单击侦听器)还是长按或拖动等。
但是,如果这不能帮助您确定问题,请发布一些代码。