uso tutorial studio propiedades personalizado example descargar android gridview grid logic

android - tutorial - Cómo obtener la posición más cercana del elemento seleccionado de gridview(o RecyclerGridview)



tutorial gridview android (1)

Puedo darte una manera fácil de lograr esto. No es perfecto, pero es fácil.

public void getNeareast(int m, int choosedId) { if (m <= 2) {//too simple ,you can just return the right result; return; } int[] choose = new int[]{-m - 1, -m, -m + 1, -1, 0, +1, m - 1, m, m + 1}; int x = choosedId / m; int y = choosedId % m; if (x == 0 || (y == 0 && x == 1)) {//no top data choose[0] = 0; choose[1] = 0; choose[2] = 0; } if ((x == m - 1 && y != 0) || x == m) {// no bottom data choose[6] = 0; choose[7] = 0; choose[8] = 0; } if (y == 1) { // no left data choose[0] = 0; choose[3] = 0; choose[6] = 0; } if (y == 0) {// no right data choose[2] = 0; choose[5] = 0; choose[8] = 0; } List<Integer> result = new ArrayList<>(); for (int i = 0; i < 9; i++) {//get choosed data if (choose[i] != 0) { result.add(choosedId + choose[i]); } } for (int i : result) {//print result; Log.d("biu", "biu->" + i); } }

Estoy tratando de hacer algo de lógica, pero no puedo alcanzar el resultado real.
Soy use r ecyclerview (GridLayoutManager) .
Tengo una celda de cuadrícula como 3 * 3,5 * 5,7 * 7 ... y así sucesivamente ...

bewlow es imagen de la cuadrícula 3 * 3

Ahora, ¿cuál es mi situación que necesito la posición de la celda más cercana ?

como se muestra en la imagen, describo algunos ejemplos de casos a continuación:

caso 1 :

Celda seleccionada -1
resultado esperado -2,5,4

caso 2: (como en la imagen)

Celda seleccionada -5
resultado esperado -1,2,3,4,6,7,8,9

Caso 3:

Celda seleccionada -6
resultado esperado -3,5,9

Entonces, ¿cómo puedo lograr dinámicamente para todas las celdas 3 * 3,5 * 5,7 * 7 ... etc.