2015-07-02 3 views
2

Я работаю над проектом, где я сохраняю скриншот в WebView. Уровень API - 21. На нормальной домашней странице он работает совершенно нормально, но когда я нахожусь на YouTube и просматриваю видео, видеоплеер возвращается как черный прямоугольник. Я хочу сделать снимок экрана, когда пользователь коснется экрана.Сделайте снимок экрана видео в webview android

Когда я снимаю снимок с Power & Кнопка громкости работает отлично. Есть ли намерение, которое берет такой скриншот? В идеале, скриншот будет содержать только веб-просмотр, но если это весь экран, я тоже могу работать с этим.

Любая помощь очень ценится.

Cheers,

Toby

Edit: некоторые из моего кода

View rootView; 
ValueCallback<String> callback = new ValueCallback<String>() { 
    @Override 
    public void onReceiveValue(String value) { 
     category1.setText(value); 
    } 
}; 
String root = android.os.Environment.getExternalStoragePublicDirectory 
     (Environment.DIRECTORY_DCIM).toString(), filename, time, puretime, movementType = ""; //movementType is set according to MotionEvent.getAction() 
File myDir = new File(root + "/saved_files/") 

protected void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 

    rootView = findViewById(android.R.id.content).getRootView(); 
    rootView.setDrawingCacheEnabled(true); 
} 

public class MyView extends View { 
    public MyView(Context context) { 
     super(context); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     calendar = Calendar.getInstance(); 
     time = String.format("%02d:%02d:%02d.%03d", calendar.get(Calendar.HOUR_OF_DAY), 
       calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), 
       calendar.get(Calendar.MILLISECOND)); 
     puretime = String.format("%02d%02d%02d%03d", calendar.get(Calendar.HOUR_OF_DAY), 
       calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), 
       calendar.get(Calendar.MILLISECOND)); 
     if (movementType.equals("down")) { 
      try { 
       filename = puretime + ".xml"; 
       webView.saveWebArchive(myDir+filename, false, callback); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     invalidate(); 
     return true; 
    } 

edit2:

по-видимому, проблема для черных прямоугольников является то, что элементы, как видео обрабатываются gpu и для «нормального» моментального снимка для работы программы необходимо будет вычислить каждый кадр, который слишком много работает.

+0

Вы решили эту проблему? –

+1

Нет, к сожалению, пока нет. – tobyUCT

ответ

0

Я думаю, что это поможет

View rootView = findViewById(android.R.id.content).getRootView(); 
    rootView.setDrawingCacheEnabled(true); 
    Bitmap screenshot = rootView.getDrawingCache(); 

Позвольте мне знать, как только вы попробуете.

UPDATE:

Если я правильно понял ваш комментарий, вы не были в состоянии изменить путь с saveWebArchive(filename).

Тогда вы можете использовать saveWebArchive(String,boolean,ValueCallback<String> callBack). Это сохранит файл с заданным именем, и вы можете использовать это имя в функции обратного вызова, чтобы делать все, что хотите (например, сохранение на внешнем хранилище или что-то еще).

Проверить здесь - saveWebArchive

+0

Он отличается от попытки попробовать, но я никогда не получаю результат, который я хочу. В прошлой попытке у меня был один и тот же скриншот каждый раз, когда я касался (я также рисую круг в позиции события касания в нижней половине экрана). Часть скриншота, где должен выглядеть веб-просмотр, теперь все время белая. Другой вопрос: следует ли включать/отключать чертежный набор до и после каждого снимка экрана? – tobyUCT

+0

вы можете попробовать (http://developer.android.com/reference/android/webkit/WebView.html#saveWebArchive(java.lang.String)) Если кеш отключен, 'getDrawingCache()' вернется ноль. Таким образом, это безопасный вариант для включения кеша. – Karthik

+0

Спасибо за быстрые ответы :). Я хочу получить доступ к снимкам экрана на моем ПК позже. Если я правильно понимаю, что saveWebArchive не позволяет мне это делать. По крайней мере, мне не удалось сохранить его в папке, в которой я сохранил изображения раньше. (этот путь был android.os.Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DCIM) .toString() + "/ saved_files/images /", а затем я добавил «filename.jpg» для изображений (имя файла - время суток в момент приземления) для saveWebArchive я изменил окончание на.xml – tobyUCT

Смежные вопросы