- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我使用 ImageGetter 来显示来自 JSON 博客文章的图像。我在日志中获得了正确的来源,但 URL 在到达 setBounds 时发生了变化。有什么想法吗?
代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_blog_view);
Intent intent = getIntent();
Uri blogUri = intent.getData();
mPost = blogUri.toString();
mUrl = getIntent().getStringExtra("mUrl");
TextView textView = (TextView) findViewById(R.id.scrollView1);
textView.setText(Html.fromHtml(mPost, imgGetter, null));
}
private ImageGetter imgGetter = new ImageGetter(){
@Override
public Drawable getDrawable(String source){
Drawable drawable = Drawable.createFromPath(source);
try {
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
}catch (NullPointerException e){
logException(e);
}
return drawable;
}
};
try前的“来源”是
http://www.domain.com/images_blog/feature.png
但是在catch中错误是:
无法解码流:
java.io.FileNotFoundException: /http:/www.domain.com/images_blog/feature.png : open failed: ENOENT (No such file or directory)
最佳答案
最简单的解决方案是:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import org.pskink.soom.R;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LevelListDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.text.Spanned;
import android.util.Log;
import android.widget.TextView;
public class TestImageGetter extends Activity implements ImageGetter {
private final static String TAG = "TestImageGetter";
private TextView mTv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_image_getter);
String source = "this is a test of <b>ImageGetter</b> it contains " +
"two images: <br/>" +
"<img src=\"http://developer.android.com/assets/images/dac_logo.png\"><br/>and<br/>" +
"<img src=\"http://developer.android.com/assets/images/icon_search.png\">";
Spanned spanned = Html.fromHtml(source, this, null);
mTv = (TextView) findViewById(R.id.text);
mTv.setText(spanned);
}
@Override
public Drawable getDrawable(String source) {
LevelListDrawable d = new LevelListDrawable();
Drawable empty = getResources().getDrawable(R.drawable.ic_launcher);
d.addLevel(0, 0, empty);
d.setBounds(0, 0, empty.getIntrinsicWidth(), empty.getIntrinsicHeight());
new LoadImage().execute(source, d);
return d;
}
class LoadImage extends AsyncTask<Object, Void, Bitmap> {
private LevelListDrawable mDrawable;
@Override
protected Bitmap doInBackground(Object... params) {
String source = (String) params[0];
mDrawable = (LevelListDrawable) params[1];
Log.d(TAG, "doInBackground " + source);
try {
InputStream is = new URL(source).openStream();
return BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
Log.d(TAG, "onPostExecute drawable " + mDrawable);
Log.d(TAG, "onPostExecute bitmap " + bitmap);
if (bitmap != null) {
BitmapDrawable d = new BitmapDrawable(bitmap);
mDrawable.addLevel(1, 1, d);
mDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
mDrawable.setLevel(1);
// i don't know yet a better way to refresh TextView
// mTv.invalidate() doesn't work as expected
CharSequence t = mTv.getText();
mTv.setText(t);
}
}
}
}
有一种不太优雅的方法可以在图片下载后重新布局 TextView:
// i don't know yet a better way to refresh TextView
// mTv.invalidate() doesn't work as expected
CharSequence t = mTv.getText();
mTv.setText(t);
如果有人知道更好的解决方案请告诉我
关于java - Html.ImageGetter TextView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16179285/
谁能帮我弄清楚如何使用 Html.ImageGetter 来使用 html 图像 src 标签显示图像?和例子或好的教程 最佳答案 要从应用程序资源中获取图像,首先在文本文件中插入一个 html 图像
我正在将 HTML 显示到 TextView 中: String html = "Hello " + "" + " This is a test
我正在尝试使用 将 HTML block 加载到 TextView 中,包括图像 URLImageParser p = new URLImageParser(articleBody, this); S
所以我使用 ImageGetter 来显示来自 JSON 博客文章的图像。我在日志中获得了正确的来源,但 URL 在到达 setBounds 时发生了变化。有什么想法吗? 代码: protected
我有一个加载 HTML 内容的 TextView(它也有 img 标签)。我的问题是有些图片太大,导致应用程序崩溃。有什么方法可以使所有图像的大小相同吗? 我的代码示例: St
我有一个 Html.ImageGetter 类,我将它与 Universal Image Loader 一起使用,以加载 标签中的图像,该标签包含在我在线获取的 html json 文件中。 图像加载
好的,我正在为这个而失去理智。我的程序中有一个解析 HTML 的方法。我想包含内联图像,我的印象是使用 Html.fromHtml(string, Html.ImageGetter, Html.Tag
我正在编写一个应用程序来显示来自网站的帖子,并使用 Html.fromHtml 来执行此操作。但是,如果我打开一篇文章,它会立即使用大约 25MB 的内存来加载图像。这是可以接受的,只是重新加载同一篇
我正在编写一个应用程序,它获取 HTML 页面并解析它们以显示在屏幕上。具体来说,此应用程序从留言板中提取 HTML 并列出用户发布的帖子。 问题是帖子中的很多内容都是中的图片标签,所以我需要写一个
我必须在 ListView 中显示一些带有来自 Internet 的图像的 HTML。图像在自定义 Html.ImageGetter 中处理。问题是,我需要可用的 TextView 来将图像下载到里面
我想要做的是,当按下按钮时,图像将出现在编辑文本字段中。 问题是我想多次添加图像 - 这意味着每次单击都会将图像添加到字符串中。 问题是在接下来的代码中,我只能看到最后按下的图像,而之前的图像正在变成
我正在尝试使用 Html.fromHtml 在 Base64 中显示 img 我有一个带有一张图片的 Base64 字符串的标签。 这是我的代码: public class GlossaryAdapt
感谢@Budius 所做的一切努力。 我的应用程序的大部分图像工作可以由 Picasso/Glide 处理,但是,某些图像显示在 TextView 中通过Html.fromHtml 。以及 TextV
我想用 SpannableString 设置一个 TextView,它来自下面的方法: Html.fromHtml(String source, Html.ImageGetter imageGette
我是一名优秀的程序员,十分优秀!