2012-06-01 13 views
5

Używam WebView do wyświetlania obrazu podobnego do mapy, ze względu na wbudowaną funkcję panoramowania i powiększania. Jednak w niektórych punktach obrazu mapy muszę nałożyć inne informacje (znaczniki itp.) I wyświetlić to wszystko.Android: jak wyświetlić bitmapę w WebView?

Więc biorę mój podstawowy obraz mapy jako bitmapę i nakładam na nią moje inne obrazy (używając Canvas i więcej bitmap), co daje mi ostateczną bitmapę z wszystkimi informacjami. Ponieważ muszę edytować obraz w środowisku wykonawczym, nie mogę użyć gotowego pliku. Wdrożenie nakładki bitmap nie jest problemem, problemem jest to, że nie wiem, jak łatwo wyświetlić wynikowy obraz z możliwościami panoramowania i powiększania.

Czy istnieje sposób wyświetlania mapy bitowej za pomocą WebView? Lub jakieś inne sugestie?

+0

Istnieją całkiem ładne biblioteki obsługujące panoramowanie i powiększanie systemu Android. Jeden przykład - https://github.com/sephiroth74/ImageViewZoom – Heitara

Odpowiedz

20

Używanie link z itsrajesh4uguys, stworzyłem ten fragment kodu:

// Desired Bitmap and the html code, where you want to place it 
Bitmap bitmap = YOUR_BITMAP; 
String html="<html><body><img src='{IMAGE_PLACEHOLDER}' /></body></html>"; 

// Convert bitmap to Base64 encoded image for web 
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); 
byte[] byteArray = byteArrayOutputStream.toByteArray(); 
String imgageBase64 = Base64.encodeToString(byteArray, Base64.DEFAULT); 
    String image = "data:image/png;base64," + imgageBase64; 

// Use image for the img src parameter in your html and load to webview 
html = html.replace("{IMAGE_PLACEHOLDER}", image); 
webview.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "utf-8", ""); 
+0

czy przetestowałeś ten kod? nie wydaje się działać – 2cupsOfTech

+0

załączając obraz Ciąg z tagiem rozwiązał problem – 2cupsOfTech

+0

dzięki za komentarz. masz rację. Dodałem dodatkową linię do mojej odpowiedzi, aby wyjaśnić rozwiązanie. –

-1

You dont wymagają Bitmap, tylko jego nazwa jest mało. Spróbuj wykonać:

html = "<html><img src=\"" + imageUrl 
         + "\"></html>"; 
final WebView webView = (WebView) view 
        .findViewById(R.id.yourWebView); 
wvImageView.getSettings().setJavaScriptEnabled(true); 
wvImageView.loadDataWithBaseURL("", html, "text/html", "utf-8", ""); 

Powinno to wyświetlić obraz w WebView. Jeśli chcesz, aby zapewnić powiększanie obiektu, spróbuj tego:

webView.getSettings().setSupportZoom(true); 
webView.getSettings().setBuiltInZoomControls(true); 
+0

Czy ten kod wyświetla obraz pobrany z adresu URL? To nie jest to, co próbuję zrobić. – breadbin

+0

Powyższy kod wymaga pełnej ścieżki do obrazu. Spróbuj podać imagePath i sprawdź, czy działa. – Shrikant

+0

Więc musiałbym zapisać zmodyfikowaną bitmapę jako plik, a potem ją przeczytać? – breadbin

1

Odpowiedź wydaje się być: brak, wyświetlanie lokalnego obiektu bitmapy w WebView, bez zapisywania go do pliku, nie jest możliwe.

+2

Fałsz. Utwórz znacznik Img, aby wyświetlać obraz, taki jak wiadomości e-mail w formacie HTML z obrazkami podkreślonymi. Używa tagu , ale src nie jest adresem danych zakodowanych z użyciem adresu URL, ale base64. img src można jeszcze zmodyfikować za pomocą javascript. – JSON

+0

Istnieje możliwość załadowania i wyświetlenia bitmapy. Sprawdź słuchawkę SONY. Wyjaśnia, jak to zrobić. – Heitara

2

Nie potrzeba zastępczy jeśli u chcą, aby załadować obraz w WebView

można bezpośrednio załadować dataurl w widok internetowy. Na przykład:

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); 
byte[] byteArray = byteArrayOutputStream.toByteArray(); 
String imgageBase64 = Base64.encodeToString(byteArray, Base64.DEFAULT); 
    String dataURL= "data:image/png;base64," + imgageBase64; 

webview.loadUrl(dataURL); //pass the bitmap base64 dataurl in URL parameter 

Mam nadzieję, że pomoże to innym! :-)