10

で画像をロードしましWebViewたが、ズームアウトすると、画像自体がデバイスの左上隅に配置されます。中央に表示されるように画像をロードする方法はありますか?

乾杯!

4

8 に答える 8

6

私はxmlとコードの組み合わせでそれを行いました。gifファイルをアセットフォルダーに保存しています。

xmlレイアウトコードは次のとおりです。

<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<WebView
    android:id="@+id/webView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true" />

</RelativeLayout>

以下はJavaコードです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_webview);
    WebView webView = (WebView) findViewById(R.id.webView);
    webView.setWebViewClient(new WebViewController());
    webView.loadDataWithBaseURL("file:///android_asset/","<html><center><img src=\"animation.gif\"></html>","text/html","utf-8","");
}

private class WebViewController extends WebViewClient {
     @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
}
于 2013-11-17T00:47:28.317 に答える
4

このコードを使用して、WebViewの画面の中央に画像を中央揃えできます。

  //first you will need to find the dimensions of the screen 
  float width;
  float height;
  float currentHeight;
  WebView mWebView;

  //this function will set the current height according to screen orientation
  @Override
  public void onConfigurationChanged(Configuration newConfig){
          if(newConfig.equals(Configuration.ORIENTATION_LANDSCAPE)){

                currentHeight=width; 
                loadImage();                 

         }if(newConfig.equals(Configuration.ORIENTATION_PORTRAIT)){

                currentHeight=height;
                loadImage();

        }
    } 


  //call this function and it will place the image at the center
  public void load and center the image on screen(){

    mWebView=(WebView)findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setBuiltInZoomControls(true);       
    mWebView.setBackgroundColor(0);

    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    height = displaymetrics.heightPixels;
    width = displaymetrics.widthPixels;
    currentHeight=height             //assuming that the phone
                                     //is held in portrait mode initially

         loadImage();        
  }
  public void loadImage(){
       Bitmap BitmapOfMyImage=BitmapFactory.decodeResource(Environment.getExternalStorgeDirectory().getAbsolutePath()+"yourFolder/myImageName.jpg");  

       mWebView.loadDataWithBaseURL("file:///"+Environment.getExternalStorgeDirectory().getAbsolutePath()
                                    +"yourFolder/","<html><center>
                                    <img src=\"myImageName.jpg\" vspace="
                                    +(currentHeight/2-(BitmapOfMyImage.getHeight()/2))+">
                                     </html>","text/html","utf-8","");
     //This loads the image at the center of thee screen                    

   }

centerタグを使用して画像を垂直方向に中央揃えし、vspaceタグを使用して画像の上マージンを指定しました。ここで、マージンは次のように計算されます:screenVierticalHeight / 2-ImageVerticalHeight / 2

お役に立てれば

于 2012-05-16T10:37:25.647 に答える
1
    mWebView.loadDataWithBaseURL("file:///"+Environment.getExternalStorgeDirectory().getAbsolutePath()+"yourFolder/","<html><center><img src=\"myImage.jpg\"></html>","text/html","utf-8","");

これにより、SDカードからの画像がwebViewの中央に配置されます。これがお役に立てば幸いです

于 2012-05-15T16:05:33.977 に答える
1
String html = "<html><head><style type='text/css'>html,body {margin: 0;padding: 0;width: 100%;height: 100%;}html {display: table;}body {display: table-cell;vertical-align: middle;text-align: center;}</style></head><body><p style=\"color:white\">+"you message"+</p></body></html>";

webView.loadData(html、 "text / html; charset = UTF-8"、null);

したがって、これにより、中央にテキストが表示されたWebビューが読み込まれます

于 2016-04-22T06:40:11.027 に答える
0

代わりに、画像を埋め込むHTMLファイルをロードしてみてください。その場合、すべてのレイアウトは標準のcssスタイルで実行できます。

于 2012-05-03T17:47:05.993 に答える
0

私は同じ問題を抱えていました-ウェブビューで垂直に中央に配置します。このソリューションはほとんどの場合機能します...多分それはあなたを少し助けることができます

                int pheight = picture.getHeight();
                int vheight = view.getHeight();

                float ratio = (float) vheight / (float) pheight;

                System.out.println("pheight: " + pheight + "px");
                System.out.println("vheight: " + vheight + "px");
                System.out.println("ratio: " + ratio + "px");

                if (ratio > 0.5)
                {
                    return;
                }

                int diff = pheight - vheight;
                int diff2 = (int) ((diff * ratio) / 4);

                if (pheight > vheight)
                {
                    // scroll to middle of webview

                    currentPhotoWebview.scrollTo(0, diff2);
                    System.out.println("scrolling webview by " + diff2 + "px");

                }
于 2012-05-18T00:51:08.333 に答える
0

私はこの答えが少し遅いことを知っていますが、JavaScriptなしのオプションがあります:

WebViewを拡張し、保護されたメソッドを使用してcomputeHorizontalScrollRange()computeVerticalScrollRange()最大スクロール範囲のアイデアを取得し、それに基づいて、垂直方向についても同様に必要な場所scrollToを 計算できます。computeHorizontalScrollRange()/2 - getWidth()/2 andcomputeVerticalScrollRange()/2 - getHeight()/2

私の唯一のアドバイスは、ロードが完了する前にロードが完了していることを確認することです。ロード中にこれが機能するかどうかはテストしていませんが、Webビューではまだスクロール範囲が正しく設定されていないため、テストされていないと思います(コンテンツはまだ読み込まれているため)

参照:Android webview:多くの情報を取得したスクロールを検出します。

于 2013-08-27T09:15:26.553 に答える
0

私にとってそれは仕事です:

String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "PICTURE FILE NAME";
File file = new File(path);
String html = "<style>img{height: 100%;max-width: 100%;}</style> <html><head></head><body><center><img src=\"" + imagePath + "\"></center></body></html>";
webView.getSettings().setDefaultZoom(ZoomDensity.FAR);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setUseWideViewPort(true); 
webView.getSettings().setLoadWithOverviewMode(true);
webView.loadDataWithBaseURL( "" ,  html, "text/html", "UTF-8", "");
于 2015-07-25T17:47:23.753 に答える