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.
- GetSupportedPreviewSize devuelve el ancho y la altura inversos
- NullPointerException en WebView (WebView.requestFocus ())
- Tutorial de previsualización de la cámara Android
- Vista previa de la cámara Android Cambiar entre las cámaras
- Android Camera Preview - ¿Cómo 'congelar' la cámara?
EDIT 2: Resuelto cambiando la línea:
View child = gallery.getChildAt(position);
con :
View child = gallery.getChildAt( position - gallery.getFirstVisiblePosition() );
- ¿Hay una manera simple de dar vuelta a la disposición del byte del onPreviewFrame de la cámara en una imagen en androide?
- Cómo recuperar la vista previa de la cámara de dormir?
- ¿Cómo obtener datos de vista previa sin procesar de un objeto de cámara al menos 15 cuadros por segundo en Android?
- Vista previa de la vista previa de la UI en Android?
- ¿Cómo maneja el android las diferencias entre el tamaño de vista previa y el tamaño real de SufaceView?
- Vista previa de la cámara Android a la imagen final
- StartPreview falló pero no todos los dispositivos
- ¿Cómo crear una vista previa de la cámara usando API 21 android?
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
- Cómo obtener el directorio predeterminado de la foto hecha por la cámara en android?
- Edge refinamiento OpenCV android