Textview显示“img”标签,也许看到这里,大家都会想到就是构建ImageGetter,重载一下其 public Drawable getDrawable(String source)方法,获取该路径的图片。

例如:

final Html.ImageGetter imageGetter = new Html.ImageGetter() {        public Drawable getDrawable(String source) {            return drawable;        };    };

下面来说下public Drawable getDrawable(String source)这个方法,source就是图片路径!

例如:

final String sText = "测试图片信息:
";tView.setText(Html.fromHtml(sText, imageGetter, null));

则source就是img的src的值,既是:http://pic004.cnblogs.com/news/201211/20121108_091749_1.jpg这个图片路径

当然这个 这个路径既可以是网络图片,也可以本地图片,项目资源图片

例如:本地图片   项目资源图片

但是不同的路径,ImageGetter的重载处理方法都不一样,下面来一一介绍各种的处理方式.

第一种:本地图片

final String sText2 = "测试图片信息:";tView.setText(Html.fromHtml(sText2, imageGetter, null));final Html.ImageGetter imageGetter = new Html.ImageGetter() {    public Drawable getDrawable(String source) {        Drawable drawable=null;    drawable=Drawable.createFromPath(source);        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());    return drawable;  };}
第二种:项目资源图片
final String sText1 = "测试图片信息:";tView.setText(Html.fromHtml(sText1, imageGetter, null));final Html.ImageGetter imageGetter = new Html.ImageGetter() {    public Drawable getDrawable(String source) {        Drawable drawable=null;    int rId=Integer.parseInt(source);    drawable=getResources().getDrawable(rId);    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());    return drawable;    };}
第三种:网络图片
final String sText = "测试图片信息:
";tView.setText(Html.fromHtml(sText, imageGetter, null));final Html.ImageGetter imageGetter = new Html.ImageGetter() { public Drawable getDrawable(String source) { Drawable drawable=null; URL url; try { url = new URL(source); drawable = Drawable.createFromStream(url.openStream(), ""); } catch (Exception e) { e.printStackTrace(); return null; } drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); return drawable;     };}

通过这三个方式,可以看出,不同的图片路径,得到图片的处理方式不同,大家也能一目了然的看出来ImageGetter是干什么的了,就是得到img中src所需的图片!

提醒一点:获取图片以后,一定要设置图片的边界,界线,即:drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());,不然获取图片后,Textview不能显示图片。

通过以上三种方式,是能可以显示出来图片,但是我发现了一个问题,就是第三种,显示网络图片,我用android2.3的系统,可以显示图片出来,并且如果图片比较大,应用会卡的现象,肯定是因为使用主线程去获取网络图片造成的,但如果我用android4.0以上的系统运行,则不能显示图片,只显示小方框。

究其原因,是在4.0的系统上执行的时候报错了,异常是:android.os.NetworkOnMainThreadException 经过查文档,原来是4.0系统不允许主线程(UI线程)访问网络,因此导致了其异常。说白了就是在主线程上访问网络,会造成主线程挂起,系统不允许使用了。



更多相关文章

  1. android BitmapFactory的OutOfMemoryError: bitmap size exceeds
  2. 【Android】Uri、UriMatcher、ContentUris详解
  3. android textview 特出显示
  4. Android调用系统摄像头拍照并剪裁压缩
  5. Android(安卓)将View 转化为bitmap 图片
  6. Android(安卓)显示Emoji表情字符
  7. MAC中设置android adb环境变量
  8. android 状态栏和导航栏(status and navigation bars)
  9. android中的状态栏

随机推荐

  1. Android布局之baselineAligned属性
  2. android横竖屏备忘
  3. Android(安卓)学习路线图
  4. Delphi XE开发 Android(安卓)开机自动启
  5. Android应用程序中执行二进制命令
  6. Android push 极光通信
  7. Android Animation 框架
  8. Android SDK: adb shell 命令的使用(am、p
  9. RTC搭建android下三层应用程序访问服务器
  10. Android 绑定数据到界面控件