到目前为止,我已经连续搜索了几个小时,但没有找到任何适合我的问题的解决方案。
我正在摆弄我的 android 应用程序并尝试制作数独游戏。
TableLayout 由 9 个 TableRows 组成,每个 TableRows 包含 9 个 TextView。因此 9*9 网格包含 81 个 TextView,每个都有一个 OnTouchListener:
final OnTouchListener cellTouch = new OnTouchListener() {
public boolean onTouch(View v, MotionEvent e) {
Log.d("TOUCH", "id: "+v.getId() + " "+e.toString());
final int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN: {
// set background to different colour
// set background back if this is different TextView
break;
}
case MotionEvent.ACTION_MOVE: {
break;
}
}
return true;
}
};
OnTouch 会在每个单独的 TextView 上触发,但在触摸一个并移动轨迹球后会发生以下情况:
- ACTION_DOWN
- ACTION_MOVE 的数量
- ACTION_UP
但是,我想要 OnTouch 触发其他 TextView 并使它们突出显示。我创建单元格的方式如下所示:
TextView cellLabel = (TextView) inflater.inflate(R.layout.sudoku_cell, tr, false);
cellLabel.setId(curCellId);
cellLabel.setText(""+ curCellId);
cellLabel.setOnTouchListener(cellTouch);
cellLabel.setOnFocusChangeListener(cellFocus);
cellLabel.setOnClickListener(cellClick);
cellLabel.setFocusable(true);
cellLabel.setClickable(true);
cellLabel.setFocusableInTouchMode(true);
每个单独的单元格:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="35dp"
android:layout_weight="1"
android:textSize="18dp"
android:textColor="#FFFFFF"
android:gravity="center"
android:background="@layout/border"
/>
我一直在尝试很多不同的东西。比如确定TextView的指针在上面,但没有任何运气。
希望你们中的任何人都有一个想法。感谢您的时间。
亲切的问候。
编辑
搜索函数循环遍历 TextView[][] 并找到相应的单元格。但是,只能在行的基础上工作。如果我从一排切换到另一排,它不起作用。
private TextView getCell (View v, MotionEvent e) {
float x = e.getX();
float y = e.getY();
for (int i = 0; i < GRID_HEIGHT; i++) {
for (int j = 0; j < GRID_WIDTH; j++) {
TextView tv = tvGrid[i][j];
Rect rectView = new Rect(tv.getLeft(), tv.getTop(), tv.getRight(), tv.getBottom());
if(rectView.contains((int)x, (int)y)) {
return tv;
}
}
}
return null;
}