2012-05-03 13 views

Antwort

3

hilft Sie diesen Code verwenden können, in einem WebView das Bild in der Mitte des Bildschirms zu zentrieren:

//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      

    } 

ich die Mitte-Tag verwendet haben das Bild vertikal zu zentrieren und verwendet dann die vspace Tag, um den oberen Rand des Bildes zu erhalten. Nun wird die Marge berechnet: screenVierticalHeight/2-ImageVerticalHeight/2

hoffe, das hilft

+1

Sieht vielversprechend aus, schaut es euch an und ändert meine Antwort! Vielen Dank! – AndroidXTr3meN

0

Versuchen Sie, eine HTML-Datei zu laden, die stattdessen das Bild einbettet. Das ganze Layout kann dann mit Standard-CSS-Stilen gemacht werden.

+0

ich, die Bilder HTML-Code ist, dass ein Bild von meiner SD-Karte lädt – AndroidXTr3meN

+0

können Sie den HTML-Code fallen lassen? Es ist schwierig, das Problem anders zu erraten. – alex

1
mWebView.loadDataWithBaseURL("file:///"+Environment.getExternalStorgeDirectory().getAbsolutePath()+"yourFolder/","<html><center><img src=\"myImage.jpg\"></html>","text/html","utf-8",""); 

Damit wird das Bild von der SD-Karte in die Mitte des webView gesetzt. Ich hoffe, das

+0

wowow das funktioniert die Hälfte des Weges, danke, aber es ist nur horizontal und nicht vertikal zentriert. Ist es möglich, es vertikal zu zentrieren? – AndroidXTr3meN

0

ich hatte das gleiche Problem - Zentrierung vertikal in Webansicht. Diese Lösung funktioniert die meiste Zeit ... vielleicht kann es Ihnen ein wenig

   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"); 

       } 
+0

Und wo sollte dieser Code> onCreate gehen? – AndroidXTr3meN

0

helfen weiß, dass ich diese Antwort ist ein wenig spät, aber hier ist eine Option ohne javascript:

Sie WebView erweitern können und die geschützte Verwendung Methoden computeHorizontalScrollRange() und computeVerticalScrollRange() eine Vorstellung von der maximalen Scroll-Bereich hat und an diesem berechnen basierend auf, wo Sie mit computeHorizontalScrollRange()/2 - getWidth()/2 and in ähnlicher Weise für vertikal zu scrollTo wollen: computeVerticalScrollRange()/2 - getHeight()/2

meine einzige Rat machen würde sicher sein, dass das Laden, bevor Sie abgeschlossen ist so, ich Ich habe nicht getestet, ob das funktioniert, während die Dinge geladen werden, aber ich denke nicht, dass der Scrollbereich noch nicht korrekt eingestellt ist (da der Inhalt noch geladen wird)

siehe: Android webview : detect scroll wo ich habe viele meiner Infos von.

6

Ich habe es mit einer Kombination aus XML und Code gemacht. Ich habe meine gif-Datei im Ordner "Assets" gespeichert.

<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> 

@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; 
     } 
} 
0

Für mich ist das Werk:

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", ""); 
0
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);

So wird dies Ihr Webansicht mit dem Text in der Mitte laden