Растровое изображение из вида не отображается на Android - PullRequest
4 голосов
/ 03 декабря 2010

Я пытаюсь создать растровое изображение из вида, который еще не отображается, чтобы установить его в качестве текстуры с OpenGL в Android.Проблема в том, что когда я создаю свое растровое изображение, параметры макета моего просмотра имеют значение 0, поскольку функция onLayout () еще не была вызвана.Есть ли способ «симулировать» макет или сделать «фоновый макет», чтобы получить правильные параметры макета?Я думал о макете Frame, имеющем два вида, фоновый из которых использовался бы для создания моего растрового изображения, так как макет был бы готов.

Ответы [ 2 ]

19 голосов
/ 03 декабря 2010

Вам действительно нужно создать макет своего представления перед его отображением в растровое изображение. Просто позвони 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 голос
/ 03 декабря 2010

Итак, некоторые правки после уточнения вопроса:)

Я предлагаю вам создать растровое изображение независимо от вида, а затем масштабировать его до того же размера, что и вид, после создания вида.Создайте растровое изображение произвольного размера, которое позволит вам отобразить на нем то, что вы хотите ..

// 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);
...