Up till now I have searched for hours on end and have not found any suitable solution to my issue.
Am fiddling around with my android application and trying to make a Sudoku game.
The TableLayout consists of 9 TableRows, each containing 9 TextViews. Thus the 9*9 grid contains 81 TextViews each having a 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;
}
};
The OnTouch gets fired on each individual TextView, but after touching one and moving the trackball around the following occurs:
- ACTION_DOWN
- number of ACTION_MOVE
- ACTION_UP
However, what I would like is the OnTouch to fire on the other TextViews and make them highlighted. The way I create a cell is shown below:
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);
Each individual cell:
<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"
/>
I have been trying so many different things. Such as determining the TextView the pointer is on top, but with out any luck.
Hope any of you have an idea. Thank you for your time.
Kind regards.
EDIT
The search function to loop through the TextView[][] and find the appropriate cell. However, only works on a row basis. If I switch from one row to the other it does not work.
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;
}