29
我有一個簡短的問題:如何使任何視圖繪製到畫布?
假設我有一個(可變的)位圖,我需要修改(添加圖像,文本等...)。
我想,爲什麼不使用Android的內置類來完成這個任務,而且只有當我需要真正定製時纔會使用很多特殊的類來繪製畫布(油漆,畫布,矩陣等等)我仍然可以使用畫布的操作?
因此,舉例來說,爲了表現出任何一種觀點(即沒有父,當然)的位圖,我可以打電話給下一個功能:
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);
}
這種事可能嗎?也許這就是它在幕後工作的方式?
我應該在繪圖和創建畫布之間的部分寫什麼?
編輯:我試了下代碼,但沒有奏效:
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);
編輯:使用的
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();
}
比如有一個樣品上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);
不知道它是否有效。
我提到的矩形應該用於視圖被允許繪製的寬度和高度。我可以使用它的寬度和高度嗎?另外,繪製到矩形位置的部分在哪裏? –
如果你已經知道位置和大小,那就簡單多了。查看編輯。 – kcoppock
你確定它有效嗎?你有沒有嘗試過,例如,在textView或imageView上? –