我的问题是:
我想在屏幕上显示完全相同的网站两次。我的第一个方法是有两个Webviews,并在其中的每个加载网站。问题是性能很差(我正在加载的网站相当复杂)。
我的第二种方法是在其中一个WebView中加载网站,并将其复制到第二个。我在这个方法上失败了。
我最后一次尝试的是扩展Webview,因为它给了它两个Canvas。但我完全不知道该怎么做。这就是我来这里的原因
关于我的问题的更多规范:
布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.josselin.panoviewer.MainActivity"
tools:ignore="MergeRootFrame"
android:orientation="horizontal">
<WebView
android:id="@+id/left"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"/>
<WebView
android:id="@+id/right"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"/>
</LinearLayout>正如您所看到的,非常简单:每个视图都占屏幕的一半。网站和用户之间不会有任何互动。
我的目标是制作一个应用程序,让用户可以看到网站使用陀螺仪和加速度计与杜洛维斯潜水。
如果你有一个更好的方法,我都睁大了耳朵!
编辑1:这是我的BitmapWebview,它在参数中包含两个ImageView。我在ImageView位图画布中绘制,而不是在Webview中绘制:
public class BitmapWebView extends WebView {
private ImageView left, right;
private Bitmap bm;
private Canvas cn;
public BitmapWebView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public void setImagesViews(ImageView left, ImageView right){
this.left = left;
this.right = right;
}
private int width, height;
@Override
protected void onSizeChanged(int w, int h, int ow, int oh) {
super.onSizeChanged(w, h, ow, oh);
this.width = w;
this.height = h;
bm = Bitmap.createBitmap(this.width, this.height, Config.ARGB_8888);
cn = new Canvas(bm);
this.left.setImageBitmap(bm);
this.right.setImageBitmap(bm);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(cn);
}
}我现在的问题是,网站中的一些图片是用ajax加载的,所以没有在ImageView中显示.
编辑2:解决方案
起作用了!这里的解决方案是:我没有从webview中绘制imageView画布,而是在扩展的ImageView中使用了WebView的绘图功能:
public class MyImageView extends ImageView {
private WebView webview;
public MyImageView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public void setWebView(WebView webview){
this.webview = webview;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
this.webview.draw(canvas);
this.invalidate();
}
}谢谢大家的帮助!
发布于 2014-03-28 09:01:29
我想你可以捕捉原始网页的图像,并在任何你想要的地方显示这个图像。但是,以这种方式,您不能触摸复制页面上的URL链接或HTML输入/按钮,因为它只是原始页面的屏幕截图。
更确切地说,你可以:
WebViewClassic.saveViewState()和loadViewState()保存和显示网页的副本。或者:
WebView.capturePicture()。或者您也可以参考: Tab.capture()来查看如何创建WebView的快照。
!!!请注意,这些方法在不同的API级别上可能不一致。
发布于 2014-03-28 08:38:32
如果性能不佳的原因是请求and服务,则可以使用HttpClient查询and内容并使用WebView。loadDataWithBaseURL ()将此内容放在两个put视图中。
https://stackoverflow.com/questions/22707174
复制相似问题