一个重复的Webview

时间:2014-03-28 07:58:15

标签: android webview

这是我的问题:

我想在屏幕上两次显示完全相同的网站。我的第一个approch是两个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>

如您所见,非常简单:每个视图都占据屏幕的一半。 网站与用户之间不会互动。

我的目标是创建一个应用程序,允许用户使用陀螺仪和加速度计与Durovis Dive一起查看网站。

如果你有更好的方法,我全都睁开眼睛!

编辑1: 这是我的BitmapWebview,它在参数中带有两个ImageView。我在ImageView Bitmap画布中绘制而不是在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的draw函数:

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();
}

}

感谢大家的帮助!

2 个答案:

答案 0 :(得分:0)

如果性能不佳是由于请求Web服务,您可以使用HttpClient查询Web内容并使用WebView。 loadDataWithBaseURL()将此内容放在两个webview中。

答案 1 :(得分:0)

我猜您可以捕获原始网页的图像,并在任何地方显示此图像。但是,通过这种方式,您无法触摸复制页面上的URL链接或HTML输入/按钮,因为它只是原始页面的屏幕截图。

更具体地说,您可以:

  1. 使用WebViewClassic.saveViewState()loadViewState()保存并显示网页副本。
  2. 或:

    1. 使用WebView.capturePicture(),这会产生 android.graphics.Picture 对象。
    2. 或者你也可以参考Android开源浏览器:Tab.capture()来了解如何创建WebView的快照。

      !!!请注意,此类方法在不同的API级别上可能不一致。