我正在尝试从尚未显示的View中创建一个位图,将其设置为Android中的OpenGL纹理。 问题是,当我创建我的位图时,我的View的布局参数有0值,因为尚未调用onLayout()函数。 有没有办法“模拟”布局或做一个“背景布局”来获得正确的布局参数? 我正在考虑一个有两个视图的Frame布局,背景一个用于创建我的位图,因为布局已经完成。
感谢。
答案 0 :(得分:19)
在将视图绘制到位图之前,您确实需要对其进行布局。只需致电
myView.measure(...);
然后
myView.layout(0, 0, myView.getMeasuredWidth(), myView.getMeasuredHeight());
我已在以下某个演示文稿中发布了有关如何执行此操作的示例:http://www.curious-creature.org/2010/12/02/android-graphics-animations-and-tips-tricks/
答案 1 :(得分:1)
因此,在澄清问题之后进行了一些编辑:)
我建议您独立于视图创建位图,然后在创建视图后将其缩放到与视图相同的大小。创建一个任意大小的位图,允许您渲染您想要的内容..
// This in some class that renders your bitmap independently, and can be // queried to get the bitmap ... Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_4444); // render something to your bitmap here
然后在创建视图后,使用预先创建的位图并将其重新缩放到正确的大小(我实际上并没有通过编译来检查它 - 可能是错误):
Rect original = new Rect(0, 0, 100, 100); RectF destination = new RectF(0.0, 0.0, (float)myView.getWidth(), (float)myView.getHeight()); Canvas canvas = new Canvas(); canvas.drawBitmap(myRenderingClass.b, original, destination, null); myView.draw(canvas);