Android: создать SurfaceView и добавить с помощью addView () - PullRequest
0 голосов
/ 04 мая 2018

Обновление: Я обнаружил, что просто создание SurfaceView не удается. Если я добавлю его в конце представлений - addView (surface, params) - он сразу затемнит экран без выполнения сегмента кода аниматора. Я также попытался создать его в XML. Тот же результат.


У меня есть RelativeLayout, и во время выполнения я пытаюсь добавить SurfaceView к нему. Представление добавлено, но оно не «пробивается», как сказано в документации. Если я изменю порядок, чтобы поставить его сверху, я получу черный экран.

Вот код, в который он добавлен, который вызывается вскоре после выполнения конструктора (в этом представлении представление «снизу», и я ничего не вижу):

surface = new SurfaceView (getContext ());
int w = ViewGroup.LayoutParams.MATCH_PARENT;
int h = ViewGroup.LayoutParams.MATCH_PARENT;
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams (w, h);
addView (surface, 0, params);

И вот код, в котором я пытаюсь что-то отобразить:

animator.addUpdateListener (new ValueAnimator.AnimatorUpdateListener()
{
  public void onAnimationUpdate (ValueAnimator animation)
  {
    zoomScale = (float) animation.getAnimatedValue ();
    Canvas canvas = surface.getHolder ().lockCanvas ();
    canvas.scale (zoomScale, zoomScale);
    canvas.drawBitmap (folderToZoom, 0, 0, null);
    surface.getHolder ().unlockCanvasAndPost (canvas);
  }
});

Помещая точку останова в последнем коде, я вижу, что SurfaceView имеет правильный размер. Также, растровое изображение folderToZoom является действительным.

...