TextView加载带图片的Html解决方案

查看了下网上关于TextView加载带图片标签的Html解决方案若干,发现很多都是讲下面这种:
1:重写ImageGetter,直接获取网络图片(这是比较通用的做法,但是遇到大图片或者网络不好的情况下,会阻塞主进程)

[java]  view plain copy print ?
  1. ImageGetter imgGetter = new Html.ImageGetter() {  
  2.         public Drawable getDrawable(String source) {  
  3.               Drawable drawable = null;  
  4.               URL url;    
  5.               try {     
  6.                   url = new URL(source);    
  7.                   drawable = Drawable.createFromStream(url.openStream(), "");  //获取网路图片  
  8.               } catch (Exception e) {    
  9.                   return null;    
  10.               }    
  11.               drawable.setBounds(00, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  
  12.               return drawable;   
  13.         }  
  14.     };  

 并设置TextView

[java]  view plain copy print ?
  1. TextView notice_content = (TextView) findViewById(R.id.notice_content);  
  2. notice_content.setText(Html.fromHtml(getIntent().getStringExtra(CONTENT),imgGetter,null));  

2:重写ImageGetter,异步加载图片(这是比较流畅的方法,设置一个默认图片,异步加载出来,如果使用Drawable作为对象接收图片,手机会自动缩放图片,这不是我想要的,我需要的是真实大小图片(图片大于手机分辨率等比例缩放))

[java]  view plain copy print ?
  1. import java.io.IOException;  
  2. import java.io.InputStream;  
  3. import java.net.MalformedURLException;  
  4.   
  5. import org.apache.http.HttpResponse;  
  6. import org.apache.http.client.methods.HttpGet;  
  7. import org.apache.http.impl.client.DefaultHttpClient;  
  8.   
  9.   
  10. import android.content.Context;  
  11. import android.content.res.Resources.NotFoundException;  
  12. import android.graphics.drawable.BitmapDrawable;  
  13. import android.graphics.drawable.Drawable;  
  14. import android.os.AsyncTask;  
  15. import android.text.Html.ImageGetter;  
  16. import android.util.DisplayMetrics;  
  17. import android.view.Display;  
  18. import android.widget.TextView;  
  19.   
  20. public class URLImageParser implements ImageGetter {  
  21.     Context c;  
  22.     TextView tv_image;  
  23.     private Drawable mDefaultDrawable;  
  24.   
  25.     public URLImageParser(TextView t, Context c) {  
  26.         this.tv_image = t;  
  27.         this.c = c;  
  28.   
  29.         try {  
  30.             mDefaultDrawable = c.getResources().getDrawable(  
  31.                     R.drawable.activity_detail_title_default);  
  32.             // Log.i("-->", "执行");  
  33.         } catch (NotFoundException e) {  
  34.             mDefaultDrawable = null;  
  35.             // Log.i("-->", "执行1");  
  36.             e.printStackTrace();  
  37.         }  
  38.     }  
  39.   
  40.     @Override  
  41.     public Drawable getDrawable(String source) {  
  42.         // TODO Auto-generated method stub  
  43.         URLDrawable urlDrawable = new URLDrawable();  
  44.         // main3.b.add(source);  
  45.         try {  
  46.             /* 
  47.              * mDefaultDrawable.setBounds(0, 0, 0 + 
  48.              * mDefaultDrawable.getIntrinsicWidth(), 
  49.              * mDefaultDrawable.getIntrinsicHeight()); 
  50.              */  
  51.             urlDrawable.drawable = mDefaultDrawable;  
  52.             URLImageParser.this.tv_image.invalidate();  
  53.         } catch (Exception e) {  
  54.             e.printStackTrace();  
  55.         }  
  56.         /* 
  57.          * urlDrawable.setBounds(0, 0, 0 + mDefaultDrawable.getIntrinsicWidth(), 
  58.          * mDefaultDrawable.getIntrinsicHeight()); 
  59.          */  
  60.         ImageGetterAsyncTask asyncTask = new ImageGetterAsyncTask(urlDrawable);  
  61.         asyncTask.execute(source);  
  62.         return urlDrawable;  
  63.     }  
  64.   
  65.     public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {  
  66.         URLDrawable urlDrawable;  
  67.   
  68.         public ImageGetterAsyncTask(URLDrawable d) {  
  69.             this.urlDrawable = d;  
  70.         }  
  71.   
  72.         @Override  
  73.         protected void onPostExecute(Drawable result) {  
  74.             if (result != null) {  
  75.                 urlDrawable.drawable = result;  
  76.                 URLImageParser.this.tv_image.invalidate();  
  77.                 // Log.i("-->", "执行3");  
  78.             }  
  79.         }  
  80.   
  81.         @Override  
  82.         protected void onPreExecute() {  
  83.             urlDrawable.setBounds(00,  
  84.                     0 + mDefaultDrawable.getIntrinsicWidth(),  
  85.                     0 + mDefaultDrawable.getIntrinsicHeight());  
  86.             urlDrawable.drawable = mDefaultDrawable;  
  87.             URLImageParser.this.tv_image.invalidate();  
  88.             super.onPreExecute();  
  89.         }  
  90.   
  91.         @Override  
  92.         protected Drawable doInBackground(String... params) {  
  93.             // TODO Auto-generated method stub  
  94.             String source = params[0];// 图片URL  
  95.             return fetchDrawable(source);  
  96.         }  
  97.   
  98.         // 获取URL的Drawable对象  
  99.         public Drawable fetchDrawable(String urlString) {  
  100.             BitmapDrawable bitmap = null;  
  101.             Drawable drawable = null;  
  102.             try {  
  103.                 InputStream is = fetch(urlString);  
  104.                 bitmap = (BitmapDrawable) BitmapDrawable.createFromStream(is,"src");  
  105.                 drawable = bitmap;  
  106.                 DisplayMetrics metrics = Constants.metrics;  
  107.                 if(bitmap.getBitmap().getWidth()>metrics.widthPixels||bitmap.getBitmap().getHeight()>metrics.heightPixels)  
  108.                     //进行等比例缩放程序  
  109.                     drawable.setBounds(00, metrics.widthPixels, ((int)(metrics.widthPixels*bitmap.getBitmap().getHeight()/bitmap.getBitmap().getWidth())));  
  110.                 else  
  111.                     drawable.setBounds(0,0,bitmap.getBitmap().getWidth(),bitmap.getBitmap().getHeight());  
  112.             } catch (Exception e) {  
  113.                 return null;  
  114.             }  
  115.             return drawable;  
  116.         }  
  117.   
  118.         private InputStream fetch(String urlString)  
  119.                 throws MalformedURLException, IOException {  
  120.             DefaultHttpClient httpClient = new DefaultHttpClient();  
  121.             HttpGet request = new HttpGet(urlString);  
  122.             HttpResponse response = httpClient.execute(request);  
  123.             return response.getEntity().getContent();  
  124.         }  
  125.     }  
  126. }  

URLDrawable类

[java]  view plain copy print ?
  1. import android.graphics.Canvas;  
  2. import android.graphics.drawable.BitmapDrawable;  
  3. import android.graphics.drawable.Drawable;  
  4.   
  5. public class URLDrawable extends BitmapDrawable {  
  6.     protected Drawable drawable;  
  7.     @Override  
  8.     public void draw(Canvas canvas) {  
  9.         
  10.       if (drawable != null) {  
  11.        drawable.draw(canvas);  
  12.       }  
  13.     }  
  14. }  

此是解决方案中的部分,如果有好的解决方案,请粘贴出来,让我参考 研究!谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值