1

我的问题如下:我尝试将图像加载到这样的文本视图:

URLImageParser p = new URLImageParser(textView, this);     
Spanned htmlSpan = Html.fromHtml(textWithImages, p, null);
textView.setText(htmlSpan);

我按照这个例子https://stackoverflow.com/a/7442725/1835251

如果我从网上加载图像,它会完美运行。

我修改了一些代码以从 SDCard 加载某些图像。

在异步任务的“doInBackground”方法中,我实现了这个:

@Override  
protected Drawable doInBackground(String... params) {  
    String source = params[0];  
    Drawable d = null  
    if(source != null) {  
      if(source.startsWith("/myApp/images/")) {  
          localImage = true;  
      }  
    }  
    if(localImage) {  
      String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();  
      d = Drawable.createFromPath(sdcard+source);  
      d.setBounds(0, 0, 0 + (int)(d.getIntrinsicWidth()), 0   
        + (int) (d.getIntrinsicHeight()));   
      localImage = false;  
    } else {  
      // load images from internet  
    }  
    return d;

localImage 是一个布尔值,用于确定当前源“指向”来自 Internet 的图像还是本地图像。

如前所述:从互联网加载图像效果很好。
但是当我从SDCard加载图像时,有时会发生并非所有图像都显示的情况。
整个文本(包括图像)被剪切,就好像它没有正确加载一样。
我发现这种情况在三星 Galaxy S3 上比在三星 S Plus 上更常见。
在 S3 上,我有时只加载 1 或 1.5 张图像,其余的会被剪切。
S Plus 总是加载所有 4 张图像,但很少剪切文本的最后 2 或 3 个句子。

我认为这是 AsyncTask 的一种时间问题,但我以前从未使用过它。

我知道这是一个非常大的帖子,但我希望有人仍然可以帮助我。

最好的祝福

西吉

4

1 回答 1

1

好吧,我很愚蠢......我解决了它!

我忘记了,如果我从互联网加载图像,我只需要 AsyncTask。对于本地图像,我不需要。

感兴趣的解决方案:

ImageGetter imgGetter = new ImageGetter() {
  @Override
  public Drawable getDrawable(String source) {                      
    String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
    Drawable d = Drawable.createFromPath(sdcard+source);                    
    d.setBounds(0, 0, 0 + (int)(d.getIntrinsicWidth()), 0 
      + (int) (d.getIntrinsicHeight())); 
    return d;
  }
};
Spanned htmlSpan = Html.fromHtml(textAndImage, imgGetter, null);
textView.setText(htmlSpan);
于 2012-12-21T12:18:32.530 回答