Ho una breve domanda:Come rendere qualsiasi vista per disegnare su tela?
Supponiamo di avere una bitmap (mutabile) che devo modificare (aggiungere immagini, testi, ecc ...).
Invece di scherzare con molte classi speciali per disegnare sulla tela (pittura, tela, matrici e così via), stavo pensando perché non usare le classi built-in di Android per questa attività e solo se ho bisogno di davvero personalizzato operazioni potrei ancora usare la tela?
Così, per esempio, al fine di mostrare qualsiasi tipo di vista (che non ha nessun genitore, naturalmente) sulla bitmap, ho potuto chiamare la funzione seguente:
public void drawViewToBitmap(Bitmap b, View v, Rect rect) {
Canvas c = new Canvas(b);
// <= use rect to let the view to draw only into this boundary inside the bitmap
view.draw(c);
}
è possibile una cosa del genere? forse è anche il modo in cui funziona dietro le quinte?
cosa devo scrivere nella parte tra il disegno e la creazione della tela?
EDIT: Ho provato il codice successivo, ma non ha funzionato:
public void drawFromViewToCanvas(final View view, final Rect rect, final Canvas canvas) {
final int widthSpec = View.MeasureSpec.makeMeasureSpec(rect.width(), View.MeasureSpec.EXACTLY);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(rect.height(), View.MeasureSpec.EXACTLY);
view.measure(widthSpec, heightSpec);
// Lay the view out with the known dimensions
view.layout(0, 0, rect.width(), rect.height());
// Translate the canvas so the view is drawn at the proper coordinates
canvas.save();
canvas.translate(rect.left, rect.top);
// Draw the View and clear the translation
view.draw(canvas);
canvas.restore();
}
esempio di utilizzo:
final int imageSize = 50;
rect = new Rect(35, 344 , 35 + imageSize, 344 + imageSize);
final ImageView imageView = new ImageView(mContext);
imageView.setImageBitmap(bitmap);
imageView.setScaleType(ScaleType.CENTER_CROP);
drawFromViewToCanvas(imageView, getRect(), canvas);
EDIT: c'è una campione su sony's website:
int measureWidth = View.MeasureSpec.makeMeasureSpec(bitmapWidth, View.MeasureSpec.EXACTLY);
int measuredHeight = View.MeasureSpec.makeMeasureSpec(bitmapHeight, View.MeasureSpec.EXACTLY);
view.measure(measureWidth, measuredHeight);
view.layout(0, 0, bitmapWidth, bitmapHeight);
view.draw(canvas);
chiedo se funziona.
il retto che ho citato dovrebbe essere usato per la larghezza e l'altezza a cui è consentito disegnare la vista. posso usare la sua larghezza e altezza? inoltre, dov'è la parte che richiama la posizione del retto? –
Se conosci già la posizione e le dimensioni, è molto più semplice. Vedi la modifica. – kcoppock
sei sicuro che funzioni? l'hai provato, ad esempio, su una TextView o un'immagineView? –