这是我的问题:
我想在屏幕上两次显示完全相同的网站。我的第一个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();
}
}
感谢大家的帮助!
答案 0 :(得分:0)
如果性能不佳是由于请求Web服务,您可以使用HttpClient查询Web内容并使用WebView。 loadDataWithBaseURL()将此内容放在两个webview中。
答案 1 :(得分:0)
我猜您可以捕获原始网页的图像,并在任何地方显示此图像。但是,通过这种方式,您无法触摸复制页面上的URL链接或HTML输入/按钮,因为它只是原始页面的屏幕截图。
更具体地说,您可以:
WebViewClassic.saveViewState()
和loadViewState()
保存并显示网页副本。或:
WebView.capturePicture()
,这会产生 android.graphics.Picture 对象。或者你也可以参考Android开源浏览器:Tab.capture()来了解如何创建WebView的快照。
!!!请注意,此类方法在不同的API级别上可能不一致。