Desidero ottenere l'oggetto rettangolo che avvolgerà il Drawable di ImageView anziché il rettangolo che avvolgerà ImageView. Userò quel rettangolo per disegnare un rettangolo di fantasia attorno a Drawable. Come posso ottenere quel rettangolo?Come ottenere il rettangolo del Drawable di ImageView su Android?
risposta
semplicemente convertire drawable in un oggetto bitmap:
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();
Ora avete il vostro rettangolo.
questo dà il rettangolo che circonda ImageView, ma voglio il rettangolo che circonda il Drawable in ImageView. – ipman
Non ho provato questo, mi è venuto in mente quando ho letto la tua domanda. Che dire di questo.
Diciamo che ImageView non ha padding e la gravità è impostata al centro. Il problema è che non è possibile utilizzare la larghezza e l'altezza del Drawable per calcolare la posizione del rettangolo poiché potrebbe ridimensionarsi per adattarsi a ImageView. Quindi devi usare le dimensioni di ImageView e il rapporto di ImageView e Drawable.
Quando il rapporto di Drawable e ImageView è uguale, il Drawable riempie completamente ImageView e quindi il rettangolo corrisponde alle dimensioni di ImageView. Le coordinate del rettangolo sono (dall'angolo in alto a sinistra, contatore saggio): (0/0), (larghezza ImageView/0), (larghezza ImageView, altezza ImageView), (0/altezza ImageView),
Quando il i rapporti non corrispondono e diciamo per esempio che il Drawable è più largo di ImageView, quindi il Drawable riempirà la larghezza completa di ImageView ma non riempirà l'altezza. Ma mentre il Drawable si centra, possiamo calcolare la coordinata y dei Drawables nell'angolo in alto a sinistra e quindi per il rettangolo. Calcola innanzitutto l'altezza corrente del Drawable in ImageView. Questo deve essere fatto poichè Drawable non ha le sue dimensioni originali dato che è stato ridimensionato per adattarsi a ImageView.
current height Drawable = (Drawable height/Drawable width) * ImageView width
valore y del punto dell'angolo superiore sinistro:
y = (ImageView height - Drawable current height)/2
Quindi le coordinate del rettangolo sono (da alto a sinistra, contrastare saggio): (0/y), (larghezza ImageView/y), (larghezza ImageView/y + altezza corrente Drawable), (0/y + altezza corrente Drawable)
Spero che tu abbia l'idea. Se il Drawable è superiore a ImageView, puoi calcolarlo allo stesso modo, ma devi scambiare i valori di larghezza e altezza.
Dipende dal tipo di scala che la vista dell'immagine si applica al drawable, è necessario eseguire l'ingegneria inversa tramite il metodo "configureBounds()" della classe 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).
per esempio io quando ho bisogno la posizione dell'immagine per un tipo di scala centrale (penso che sia più facile rispetto agli altri perché la vista dell'immagine non scala dell'immagine) che faccio l'inverso di:
(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);
E con questi dati dovresti essere in grado di creare il rettangolo, so che questo è un po 'complicato ma funziona per me.
Hai capito la parte di 0.25f? Perché pensi che abbia a che fare con la densità, se tutte le cose qui sono in pixel? –
- 1. Android, ImageView su ImageView
- 2. personalizzato drawable con ImageView
- 3. rettangolo forma drawable non verrà visualizzato come casella elemento selettore
- 4. Come disegnare linee su ImageView su Android?
- 5. Bitmap vs ImageView vs Drawable
- 6. Android come applicare la maschera su ImageView?
- 7. come ottenere il colore di sfondo del pulsante su Android?
- 8. android: imageview all'interno del pulsante
- 9. src ImageView con selettore drawable ignora stato
- 10. Android: come ottenere ImageView per riempire lo schermo
- 11. Ottenere drawable specifico dalla lista stato drawable
- 12. Android: disegno di una tela su ImageView
- 13. Disegno rettangolo su picturebox - come limitare l'area del rettangolo?
- 14. Scarica per imageview su Android
- 15. Riutilizzo di parti di Drawable su Android
- 16. ImageView multiplo Android in movimento su touch
- 17. rettangolo di disegno su tela Android
- 18. Android: imageView padding
- 19. Android - Come spostare ImageView su Swipe
- 20. Come posso impostare drawable su un ListView in Android
- 21. Masking a Drawable/Bitmap su Android
- 22. Ottenere il percorso del file da un'immagine in ImageView
- 23. Vincolare il rettangolo all'interno del rettangolo
- 24. Ottenere il rettangolo visibile del contenuto di un UIScrollView
- 25. Come centrare automaticamente il ritaglio ImageView Android?
- 26. Come effettuare un imageview sopra un altro ImageView in Android
- 27. Android ImageView ScaleType * FIT_TOP *
- 28. Set ID di risorsa drawable in Android: src per ImageView utilizzando i dati vincolante Android
- 29. Ottenere immagini da ImageView
- 30. Come impostare il tipo di scalabilità di imageview su topCrop
questo dà solo la larghezza e l'altezza del Drawable, ma voglio il rettangolo che circonda il Drawable. – ipman
puoi spiegare meglio cosa intendi? Intendi il layout fuori da ImageView? – Andreas
No Voglio dire, a volte ImageView ha uno spazio tra i suoi limiti e Drawable in ImageView. Non voglio includere questa spaziatura nel mio rettangolo. – ipman