Problemas con Gallery.getChildAt (int position)

Estoy tratando de crear un efecto de vista previa en una vista de galería y encontrar problemas con la galería.getChildAt (posición int), que está devolviendo null la mayor parte del tiempo. Se supone que devolver nulo sólo cuando el niño no se muestra, que no es el caso aquí, ya que el usuario necesita para desplazarse sobre él. ¿Hay una manera de arreglar esto, o debo cambiar mi enfoque? Aquí está mi código:

gallery.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_UP){ preview_container.setVisibility(View.GONE); } else if(event.getDownTime()>2500){ int position = gallery.pointToPosition((int)event.getX(), (int)event.getY()); if (position!=AdapterView.INVALID_POSITION){ View child = gallery.getChildAt(position); if(child!=null){ Bitmap tmp_bitmap = book.imageForPreview(position); previewImg.setImageBitmap(tmp_bitmap); FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(tmp_bitmap.getWidth()+2, tmp_bitmap.getHeight()+2,Gravity.NO_GRAVITY); int[] coord = new int[2]; child.getLocationOnScreen(coord); int y = MMBookReader.this.getWindowManager().getDefaultDisplay().getHeight()-(tmp_bitmap.getHeight()+view.getHeight()); int x = (int) coord[0]-(tmp_bitmap.getWidth()-child.getWidth())/2; layout.leftMargin=x; layout.topMargin=y; preview_container.setVisibility(View.VISIBLE); preview_container.setLayoutParams(layout); previewPageCount.setText(book.getMmpages().get(position).getPosition()+"/"+book.getPages()); } } else preview_container.setVisibility(View.GONE); } return false; } }); 

EDIT: No estoy tratando de poblar la vista de Galería, ya he hecho con esta parte y bien consciente del uso de una clase de adaptador.

EDIT 2: Resuelto cambiando la línea:

 View child = gallery.getChildAt(position); 

con :

 View child = gallery.getChildAt( position - gallery.getFirstVisiblePosition() ); 

Su problema es que está asumiendo que el argumento de position getChildAt toma y la posición de un elemento en su adaptador son los mismos – no lo son.

La posición en getChildAt es la posición del niño dentro de su padre ViewGroup, no tiene nada que ver con su posición de adaptador – que es que se ejecuta de 0 a getChildCount()-1 .

Puede utilizar esto en combinación con getFirstVisiblePosition() que devolverá la posición del primer elemento en su adaptador que es visible. La primera vista visible es también el primer hijo en su padre, por lo que la posición que pasaría a getChildAt para este elemento sería 0 .

No se puede cambiar elementos de la galería (vistas) como este (por lo que sé). Debe cambiar los datos de esta vista en el adaptador de la galería y llamar a "notifyDataSetChange ()". En el getView del adaptador usted entonces puede cambiar el mapa de bits de la visión según los datos … (por ejemplo usted puede comprobar si un mapa de bits está cargado ya si no utiliza una imagen del defecto de recursos …)

Si eso no es lo que quería decir, aclare. ¿Qué tipo de adaptador usas, etc …

Buena suerte, JPM

  • Vista previa de cámara negra en Android 7
  • ¿Cuándo Android toma su reciente captura de pantalla del selector de aplicaciones?
  • Vista previa de la cámara con una imagen transparente arriba
  • ¿Cómo mejorar la vista previa de la cámara?
  • Mostrar imagen de aplicación personalizada en el administrador de tareas de ICS o JB
  • Android - Vista preliminar de la cámara
  • vista previa de la cámara
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.