使用AsyncTask将图像加载到Textview

时间:2012-12-21 12:09:35

标签: android android-asynctask textview drawable

我的问题如下:我尝试将图像加载到文本视图中,如下所示:

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是一个boolen,用于确定当前源是否“指向” 来自互联网或本地图像的图像。

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

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

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

祝你好运

Siggy

1 个答案:

答案 0 :(得分: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);