私は質問があります。現時点では、WebViewののキャプチャ画像はであり、非推奨のです。capturePicture関数に替わるもの
機能を置き換える方法があるかどうか尋ねたいと思います。私は私が最終的に解決策を見つけたそれはWebViewののキャプチャ全体(だけではなくビューが表示されている)ことができます
おかげ
私は質問があります。現時点では、WebViewののキャプチャ画像はであり、非推奨のです。capturePicture関数に替わるもの
機能を置き換える方法があるかどうか尋ねたいと思います。私は私が最終的に解決策を見つけたそれはWebViewののキャプチャ全体(だけではなくビューが表示されている)ことができます
おかげ
を意味しました。
コード
public class WebViewActivity extends Activity {
private static WebView webView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
webView = (WebView) findViewById(R.id.webView1);
webView.loadUrl("http://developer.android.com/reference/packages.html");
// webView.loadUrl("http://developer.android.com/training/basics/firstapp/creating-project.html");
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
// do your stuff here
webView.measure(MeasureSpec.makeMeasureSpec(
MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
webView.layout(0, 0, webView.getMeasuredWidth(),
webView.getMeasuredHeight());
webView.setDrawingCacheEnabled(true);
webView.buildDrawingCache();
Bitmap bm = Bitmap.createBitmap(webView.getMeasuredWidth(),
webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas bigcanvas = new Canvas(bm);
Paint paint = new Paint();
int iHeight = bm.getHeight();
bigcanvas.drawBitmap(bm, 0, iHeight, paint);
webView.draw(bigcanvas);
System.out.println("1111111111111111111111="
+ bigcanvas.getWidth());
System.out.println("22222222222222222222222="
+ bigcanvas.getHeight());
if (bm != null) {
try {
String path = Environment.getExternalStorageDirectory()
.toString();
OutputStream fOut = null;
File file = new File(path, "/aaaa.png");
fOut = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.PNG, 50, fOut);
fOut.flush();
fOut.close();
bm.recycle();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
}
}
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
エラーを取得するjava.lang.IllegalArgumentException:幅と高さが> 0である必要があります 助けてください –
@ YogeshLakhotia:高さや幅を取得する前にwebviewが完全に読み込まれていることを確認してください。私はAsyncTaskを使用しました。私はなぜ、あなたのwebviewが完全にロードされる前にonPageFinishedを実行できるのかわかりません。私は同じ問題を抱えています。私はあなたのコードを見ないので、私はあなたにいくつかのケースを提案します。 – lolyoshi
私の問題は解決しました...私はコードに答えました。 –
使用のいくつかのWebView
例のdraw()
方法:APIレベル21を標的とするアプリの場合
ImageView imageview;
WebView webview;
class Background extends AsyncTask<Void, Void, Bitmap>
{
@Override
protected Bitmap doInBackground(Void... params)
{
try
{
Thread.sleep(2000);
Bitmap bitmap = Bitmap.createBitmap(webview.getWidth(), webview.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
webview.draw(canvas);
return bitmap;
}
catch (InterruptedException e){}
catch (Exception e){}
return null;
}
@Override
protected void onPostExecute(Bitmap result)
{
imageview.setImageBitmap(result);
}
}
webview.setWebChromeClient(new WebChromeClient()
{
public void onProgressChanged(WebView view, int progress)
{
if(progress==100)
new Background().execute();
}
});
は7-8の方法で働いていましたが、この方法だけが私の場合に働いていました:) – userAndroid
( Lollipop)とbove、またこの質問を参照してください:http://stackoverflow.com/questions/30078157/webview-draw-not-properly-working-on-latest-android-system-webview-update –