我已經下載了網頁html和其中的圖像。現在,我試圖將它們展示給用戶。我已經嘗試了兩種不同的方法,並且不確定哪個最適合使用。兩者都有他們的問題。試圖加載下載的網頁和圖像
首先,我試着用下面的代碼文本視圖:
TextView content = (TextView)findViewById(R.id.article_content);
MyImageGetter mig = new MyImageGetter(this, urlId);
Spanned span = Html.fromHtml(contents, mig, null);
content.setText(span);
我真的很喜歡這是如何工作的,但有兩個問題。第一個,也是最困難的是,當一篇文章有很多圖像時,我會得到OutOfMemory fc's。 MyImageGetter代碼如下
public class MyImageGetter implements Html.ImageGetter{
String urlId = null;
Context c = null;
public MyImageGetter(ArticleViewer articleViewer, String urlId2) {
c = articleViewer;
urlId = urlId2;
}
public Drawable getDrawable(String source) {
String[] brokenUrl = source.split("/");
String imgName = brokenUrl[brokenUrl.length-1];
File image = new File("/data/data/com.that1dev.RibbonReader/Offline/" + urlId + "/" + imgName);
Log.w("MyApp", image.getAbsolutePath());
Bitmap bm = BitmapFactory.decodeFile(image.getAbsolutePath());
Drawable d = new BitmapDrawable(c.getResources(), bm);
d.setBounds(0,0, d.getIntrinsicWidth(),d.getIntrinsicHeight());
return d;
}
}
另一個問題是textview根據用戶選擇和設備方向有不同的寬度。如果視圖中的圖像大於文本視圖寬度,則會簡單地進行裁剪。但是,我相信我可以自己解決這個問題,而不會太困難。我只是沒有嘗試過,因爲我試圖先解決內存問題。但是,任何協助都將不勝感激。
我試過的另一種方法是webview。
WebView webContent = (WebView)findViewById(R.id.web_content);
webContent.loadDataWithBaseURL("", contents[1], "text/html", "utf-8", "");
webContent.setBackgroundColor(Color.TRANSPARENT);
不幸的是,無論我嘗試什麼,背景都保持白色,並且令人難以置信的難看。我似乎無法找到適用於3.0和4.0的解決方案。
如果我有選擇,我真的很喜歡TextView方法的工作,因爲我更喜歡它的外觀與WebView呈現的東西的方式。
webview圖像和textview圖像如何不同大小?這兩個都是在圖像加載大約300x500。 webview如何進一步縮小呢?其他應用程序能夠完成這一點(透明的網絡視圖或內存安全的文本視圖),並且這種做法已經足夠普遍(幾乎每個離線rss閱讀器),我不會想象它會非常困難。 – 2012-04-07 20:29:46
我不確定這一點,但我認爲webview正在抽取圖像以在屏幕上顯示它們 - 它可能不是。但是,當然最大的問題是如果你能避免它們,就不要一次把它們都放在內存中。它也可能有助於在清單中將您的應用程序標記爲需要超過默認堆空間 – JRaymond 2012-04-07 20:41:04
感謝關於堆空間的提示。這就是我所尋找的訣竅。這看起來是處理如此大量圖像的唯一方法。如果可以的話,我仍然會嘗試讓webview工作,因爲我無法使用這麼多內存,但目前爲止這很棒。 – 2012-04-07 21:30:47