Quiero obtener el objeto rectángulo que ajustará el Drawable de ImageView en lugar del rectángulo que ajustará ImageView. Usaré ese rectángulo para dibujar un rectángulo elegante alrededor de Drawable. ¿Cómo puedo obtener ese rectángulo?¿Cómo obtener el rectángulo del Drawable de ImageView en Android?
Respuesta
simplemente convertir el dibujable en un objeto de mapa de bits:
Bitmap bmp = ((BitmapDrawable)dr).getBitmap();
int w = bmp.getWidth();
int h = bmp.getHeight();
Rect rect = new Rect();
ImageView iV = new ImageView();
rect.left = iV.getLeft();
rect.top = iV.getTop();
rect.bottom = iV.getBottom();
rect.right = iV.getRight();
Ahora que tenemos un rectángulo.
esto da el rectángulo que rodea ImageView, pero quiero el rectángulo que rodea el Drawable en ImageView. – ipman
No lo he intentado, me vino a la mente al leer su pregunta. ¿Qué tal esto?
Digamos que ImageView no tiene relleno y la gravedad está centrada. El problema es que no se puede usar el ancho y alto del Drawable para calcular la posición del rectángulo, ya que se puede cambiar el tamaño para que se ajuste a ImageView. Entonces debe usar las dimensiones de ImageView y la proporción de ImageView y Drawable.
Cuando la relación del Drawable y el ImageView es igual, el Drawable llena el ImageView por completo y luego el rectángulo coincide con las dimensiones del ImageView. Las coordenadas del rectángulo son (desde la esquina superior izquierda, contador sabio): (0/0), (ancho ImageView/0), (ancho ImageView, altura ImageView), (0/altura ImageView),
Cuando el las proporciones no coinciden y digamos, por ejemplo, que el Drawable es más ancho que el ImageView, entonces el Drawable cubrirá el ancho completo de ImageView, pero no completará la altura. Pero a medida que el Drawable se centra, podemos calcular la coordenada y de la esquina superior izquierda Drawables y, por lo tanto, para el rectángulo. Primero calcule la altura actual del Drawable en ImageView. Esto debe hacerse como Drawable doesn ' t tiene sus dimensiones originales, ya que se redimensionó para adaptarse a la ImageView.
current height Drawable = (Drawable height/Drawable width) * ImageView width
y valor de la coordenada de la esquina superior izquierda:
y = (ImageView height - Drawable current height)/2
Así las coordenadas del rectángulo son (desde la esquina superior izquierda, el contador del reloj): (0 a/a), (ancho ImageView/y), (ancho ImageView/y + altura actual Drawable), (0/y + altura actual Drawable)
Espero que entienda la idea. Si el Drawable es más alto que ImageView, puede calcularlo de la misma manera, pero tiene que intercambiar los valores de ancho y alto.
Depende del tipo de escala que la vista de la imagen aplique al dibujable, tiene que hacer ingeniería inversa sobre el método "configureBounds()" de la clase ImageView (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.2_r1/android/widget/ImageView.java#ImageView.configureBounds%28%29).
por ejemplo, que cuando necesito la posición de la imagen para un tipo de escala central (creo que es más fácil que los otros porque la vista de la imagen no se escala la imagen) hago la inversa de:
(mDrawMatrix.setTranslate((int) ((vwidth - dwidth) * 0.5f + 0.5f),
(int) ((vheight - dheight) * 0.5f + 0.5f));)
ImageView iv (Your ImageView);
Drawable dw = iv.getDrawable();
int dwidth = dw.getIntrinsicWidth();
int dheight = dw.getIntrinsicHeight();
int vwidth = iv.getWidth() - iv.getPaddingLeft() - iv.getPaddingRight();
int vheight = iv.getHeight() - iv.getPaddingTop() - iv.getPaddingBottom();
int realImageWidth = (int)((vwidth - dwidth) * 0.25f);
// (I do not know why I had to put 0.25f instead of 0.5f,
// but I think this issue is a consequence of the screen density)
int realImageHeight = (int)((vheight - dheight) * 0.25f);
Y con esta información deberías poder crear el rectángulo, sé que esto es un poco complicado pero funciona para mí.
¿Has entendido la parte del 0.25f? ¿Por qué crees que tiene que ver con la densidad, si todo está aquí en píxeles? –
- 1. Bitmap vs ImageView vs Drawable
- 2. Implementación de un drawable personalizado en Android
- 3. ¿Cómo poner una imageview encima de otro imageview en Android
- 4. Drawable-hdpi, Drawable-mdpi, Drawable-ldpi Android
- 5. "@android: drawable/ic_" vs "@ * android: drawable/ic_"
- 6. Android, ImageView sobre ImageView
- 7. Android: cómo obtener ImageView para llenar la pantalla
- 8. Android - recursos Abierto de cadena @drawable
- 9. Obtener imagen de ImageView
- 10. Cómo voltear ImageView en Android?
- 11. Android ImageView con esquinas redondeadas no funciona
- 12. Android: ImageView amplía la imagen de origen
- 13. para imageview en Android
- 14. Obtener la ruta del archivo de una imagen en ImageView
- 15. Android: Drawable no aparece
- 16. Android ImageView setImageResource en el código
- 17. de ImageView Android no funciona
- 18. drawable vs. drawable-ldpi/drawable-mdpi
- 19. Cómo crear un Drawable de byte []? (Android)
- 20. Android ImageView ScaleType y altura del elemento
- 21. Android ImageView ScaleType * FIT_TOP *
- 22. Drawable to byte []
- 23. cómo quitar rectángulo marco del diálogo personalizado
- 24. Mostrar el byte [] a ImageView en Android
- 25. establecer fuente de ImageView dinámicamente android
- 26. ¿Cómo evito las incrustaciones en Android Imageview?
- 27. Android imageview no respetando maxWidth?
- 28. Mosaico de imágenes en Android con ImageView en XML
- 29. Android ImageView Animation
- 30. Drawable.setState() ¿Cómo controlo el estado específico del drawable?
esto solo da el ancho y la altura del Drawable, pero quiero el rectángulo que rodea al Drawable. – ipman
¿Puedes explicar mejor a qué te refieres? ¿Te refieres a la distribución de ImageView? – Andreas
No, quiero decir, a veces ImageView tiene algo de espacio entre sus límites y Drawable en ImageView. No quiero incluir este espacio en mi rectángulo. – ipman