Android Weemo SDK сделать снимок экрана WeemoVideoInFrame
Можно ли сделать снимок экрана WeemoVideoInFrame? Я попробовал следующий код, и он дает мне это. Я думаю, что мне нужно получить ссылку на базовую поверхность, чтобы иметь возможность делать скриншоты, но разве нет способа достичь этого? Кто-нибудь может порекомендовать обойти это?
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
1 ответ
К сожалению, внутренним представлением, используемым для визуализации видеокадров, является TextureView, и поэтому вы не можете запросить кэш чертежа (TextureView - HardwareAccelerated).
Более того, в документации указано, что:
публичный финал ничья (холст холст)
Подклассы TextureView не могут выполнять свой собственный рендеринг с объектом Canvas.
Так что ваши draw()
вызов не будет влиять на TextureView.
Может быть, вы могли бы попытаться использовать getBitmap()
метод на внутреннем TextureView, но я не могу гарантировать вам, что это будет работать.
В настоящее время в Weemo SDK такой функции нет, но мы пытаемся найти более удобный способ захвата этих кадров.
Кроме того, нам было бы интересно лучше понять ваш вариант использования. Может быть, вы могли бы рассказать немного больше о том, чего вы пытаетесь достичь. Это может помочь нам разработать новую функцию SDK, которая будет наилучшим образом соответствовать вашим потребностям.
Изменить: чтобы получить ссылку на это TextureView
, просто просмотрите иерархию представления. Вы могли бы, например, сделать это:
WeemoVideoInFrame videoFrame = getView().findViewById(R.id.video_frame);
findTextureView(videoFrame);
/* ... */
TextureView findTextureView(WeemoVideoInFrame frame) {
for (int index = 0; index < frame.getChildCount(); index++) {
View child = frame.getChildAt(index);
if(child instanceof TextureView) {
return (TextureView) child;
}
}
return null;
}
Но имейте в виду, что это поведение не гарантируется.