我需要用 Canvas 绘制一个 WebView。我现在正在寻找两天的答案,但找不到任何我需要的东西。
目前我可以像这样显示 WebView
WebView wv = new WebView(this);
String htmlContent = foo_getHtmlContent();
wv.loadData(htmlContent, "text/html", "UTF-8");
setContentView(wv);
它工作得很好,但在 pos 0,0 处开始视图。我也可以用这样的画布绘制一个视图(从 XML 膨胀)
LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.layout_test, null);
v.measure(MeasureSpec.getSize(v.getMeasuredWidth()), MeasureSpec.getSize(v.getMeasuredHeight()));
v.layout(400, 400, 400, 400);
canvas.translate(100, 100);
v.draw(canvas);
这正是我想要绘制的方式,但视图错误。我找不到将这两种方法结合起来以第二个代码的方式(或任何类似方式)从第一个代码中绘制视图的方法
有谁知道如何用 Canvas 绘制 WebView?
编辑:
没有人知道吗?
现在我已经尝试过了,但由于缺少属性,我得到了 NullPointerException。
LayoutInflater li =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
WebView wv = null;
try
{
wv = (WebView) li.createView("WebView", "android.webkit.", null);
wv.loadData(htmlContent, "text/html", "UTF-8");
wv.measure(MeasureSpec.getSize(wv.getMeasuredWidth()),MeasureSpec.getSize(wv.getMeasuredHeight()));
wv.layout(100, 100, 400, 400);
canvas.translate(100, 100);
wv.draw(canvas);
}catch (InflateException e)
{
Log.e("Meassure", "InflateException: " + e);
} catch (ClassNotFoundException e)
{
Log.e("Meassure", "ClassNotFoundException: " + e);
}
有谁知道如何创建合适的属性?
EDIT2:
我又来了。
我尝试了其他方法,并找到了一种使用 TextView 但不适用于 Web 视图的方法。这个
LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.layout_test, null);
TextView textView = (TextView) v.findViewById(R.id.textView1);
textView.setText("Hello World");
v.measure(MeasureSpec.getSize(v.getMeasuredWidth()), MeasureSpec.getSize(v.getMeasuredHeight()));
v.layout(400, 400, 400, 400);
canvas.translate(100, 100);
v.draw(canvas);
工作得很好,并且做了 TextView 应该做的所有事情,但是这个
View v = li.inflate(R.layout.web_layout, null);
WebView wv = (WebView) v.findViewById(R.id.webView);
wv.loadData(htmlContent, "text/html", "UTF-8");
v.measure(MeasureSpec.getSize(v.getMeasuredWidth()), MeasureSpec.getSize(v.getMeasuredHeight()));
v.layout(400, 400, 400, 400);
canvas.translate(100, 100);
v.draw(canvas);//if i substitute this line by setContentView(v); it works but without positioning
什么都不做(除了向 LogCat 扔有趣的东西)。
LogCat 输出如下(大约每 10 毫秒重复一次):
06-17 14:04:06.210: D/webview(19424): [InitTabEffectPivot] >> nScreenWidth = 720
06-17 14:04:06.210: D/webview(19424): [InitTabEffectPivot] >> nScreenHeight = 1280
06-17 14:04:06.220: D/skia(19424): notifyPluginsOnFrameLoad not postponed
我还尝试在 wv.loadData 行之后调用 Thread.sleep(10),因为我在某处读到 WebView 需要一些时间来加载其内容,但这也不起作用。至少有人知道 logcat 输出是什么意思吗?