Как захватить полное (прокручиваемое) веб-представление в Android (точно. Я захватил, но другая сторона была белой) - PullRequest
0 голосов
/ 24 января 2019

Я хочу, чтобы весь захват веб-просмотра ... но это не легко ...

я использую базовое веб-представление.

и моя проблема - захват только места на экране. мне нужна вся картинка в интернете (мой результат ниже изображения)

Я много пробовал.

но это не работа

см. Мой код ниже

// MainActivity о настройках Webview.

    wvMain = findViewById(R.id.wvMain);
    WebSettings mWebSettings = wvMain.getSettings();
    mWebSettings.setJavaScriptEnabled(true);
    mWebSettings.setLoadWithOverviewMode(true);
    mWebSettings.setUseWideViewPort(true);
    mWebSettings.setSupportZoom(true);
    mWebSettings.setBuiltInZoomControls(true);
    mWebSettings.setDisplayZoomControls(false);
    wvMain.setNestedScrollingEnabled(true);
    wvMain.setVerticalScrollBarEnabled(true);

    wvMain.setWebViewClient(new CaptureWebViewClient());

    wvMain.loadUrl("https://www.youtube.com/");

// Часть вызова захвата

class Capture implements Runnable {

    @Override
    public void run() {
        Integer[] integers = new Integer[]{100};
        new AsyncCapture(context, wvMain).execute(integers);
    }
}

// AsyncCapture Class

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.os.AsyncTask;
import android.text.format.DateFormat;
import android.view.View;
import android.webkit.WebView;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;

public class AsyncCapture extends AsyncTask<Integer, Integer, String[]> {
    private Bitmap mBitmap;
    private Context mContext;
private WebView mWebView;

public AsyncCapture(Context mContext, WebView mWebView) {
    this.mContext = mContext;
    this.mWebView = mWebView;
}

@Override
protected void onPreExecute() {
    try {
        int density = (int) this.mContext.getResources().getDisplayMetrics().density;
        mWebView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

        this.mBitmap = Bitmap.createBitmap(
                this.mWebView.getMeasuredWidth(), this.mWebView.getMeasuredHeight(), Bitmap.Config.RGB_565);
        this.mWebView.draw(new Canvas(this.mBitmap));

        Toast.makeText(mContext, "PreExcute Done", Toast.LENGTH_SHORT).show();
    } catch (OutOfMemoryError oome) {
        Toast.makeText(mContext, "OOM ERROR", Toast.LENGTH_SHORT).show();
        cancel(true);
    } catch (Exception e) {
        e.printStackTrace();
        cancel(true);
    }
    super.onPreExecute();
}

@Override
protected String[] doInBackground(Integer... integers) {
    try {
        String path = FileUtil.getAppDirectoryPath(this.mContext);
        String filepath = path + "/" + (DateFormat.format("yyyyMMdd-HHmmss", new Date()) + ".png");
        if (!new File(path).exists()) {
            new File(path).mkdirs();
        }
        FileOutputStream mFileOutputStream = new FileOutputStream(new File(filepath));
        this.mBitmap.compress(Bitmap.CompressFormat.PNG, 100, mFileOutputStream);
        mFileOutputStream.flush();
        mFileOutputStream.close();
        Toast.makeText(mContext, "doInBackground Done", Toast.LENGTH_SHORT).show();
        return new String[]{"ok", filepath};
    } catch (Exception e) {
        e.printStackTrace();
        return new String[]{"error", e.toString()};
    }
}

@Override
protected void onPostExecute(String[] result) {
    if (this.mBitmap != null) {
        this.mBitmap.recycle();
        this.mBitmap = null;
    }
    Intent mIntent = new Intent("good");
    mIntent.putExtra("result", result);
    this.mContext.sendBroadcast(mIntent);
    Toast.makeText(mContext, "onPostExecute Done", Toast.LENGTH_SHORT).show();

    super.onPostExecute(result);
}

protected void onCancelled() {
    super.onCancelled();
    if (this.mBitmap != null) {
        this.mBitmap.recycle();
        this.mBitmap = null;
    }
    Intent mIntent = new Intent("good");
    this.mContext.sendBroadcast(mIntent);
}
* *} Тысяча двадцать-один

/////////////////////////////////////////////// ///////////// это не результат

enter image description here

Захват хорошо ... но только размер экрана!

пожалуйста, помогите мне. THX !!

...