En Gingerbread, GridView getScrollY() funciona en algunas situaciones y en otras no. Aquí hay una alternativa basada en la primera respuesta. La altura de la fila y el número de columnas que se han conocido (y todas las filas deben tener la misma altura):
public int getGridScrollY()
{
int pos, itemY = 0;
View view;
pos = getFirstVisiblePosition();
view = getChildAt(0);
if(view != null)
itemY = view.getTop();
return YFromPos(pos) - itemY;
}
private int YFromPos(int pos)
{
int row = pos/m_numColumns;
if(pos - row * m_numColumns > 0)
++row;
return row * m_rowHeight;
}
La primera respuesta también da una buena idea de cómo píxel desplazarse un GridView. Aquí es una solución generalizada, que se desplazará a un equivalente de GridView para scrollTo (0, scrolly):
public void scrollGridToY(int scrollY)
{
int row, off, oldOff, oldY, item;
// calc old offset:
oldY = getScrollY(); // getGridScrollY() will not work here
row = oldY/m_rowHeight;
oldOff = oldY - row * m_rowHeight;
// calc new offset and item:
row = scrollY/m_rowHeight;
off = scrollY - row * m_rowHeight;
item = row * m_numColumns;
setSelection(item);
scrollBy(0, off - oldOff);
}
Las funciones se implementan dentro de un GridView subclase, pero se pueden recodificar fácilmente como externo.
contenedor ¿para qué? por favor dime –
De mi vaga memoria esto es un error de copiar/pegar y debería ser mGrid. – Christoph
@SalmanAshraf la Vista que contiene los elementos, pruebe mGrid de lo contrario –