使用LevelListDrawable实现Html.fromHtml多张图片显示

首先一段html字符串

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\">";


然后ImageGetter里面的getDrawable(String souce)方法里面实现

[java] view plaincopy
  1. LevelListDrawable d = new LevelListDrawable();  
  2. rawable empty = getResources().getDrawable(R.drawable.ic_launcher);  
  3.        d.addLevel(00, empty);  
  4.        d.setBounds(00, empty.getIntrinsicWidth(), empty.getIntrinsicHeight());  
  5.   
  6.   
  7.        new LoadImage().execute(source, d);  


这里的LodImage类是一个异步加载类,详见代码了

[java] view plaincopy
  1. class LoadImage extends AsyncTask<Object, Void, Bitmap> {  
  2.   
  3.        private LevelListDrawable mDrawable;  
  4.   
  5.        @Override  
  6.        protected Bitmap doInBackground(Object... params) {  
  7.            String source = (String) params[0];  
  8.            mDrawable = (LevelListDrawable) params[1];  
  9.            Log.d(TAG, "doInBackground " + source);  
  10.            try {  
  11.                InputStream is = new URL(source).openStream();  
  12.                return BitmapFactory.decodeStream(is);  
  13.            } catch (FileNotFoundException e) {  
  14.                e.printStackTrace();  
  15.            } catch (MalformedURLException e) {  
  16.                e.printStackTrace();  
  17.            } catch (IOException e) {  
  18.                e.printStackTrace();  
  19.            }  
  20.            return null;  
  21.        }  
  22.   
  23.        @Override  
  24.        protected void onPostExecute(Bitmap bitmap) {  
  25.            Log.d(TAG, "onPostExecute drawable " + mDrawable);  
  26.            Log.d(TAG, "onPostExecute bitmap " + bitmap);  
  27.            if (bitmap != null) {  
  28.                BitmapDrawable d = new BitmapDrawable(bitmap);  
  29.                mDrawable.addLevel(11, d);  
  30.                mDrawable.setBounds(00, bitmap.getWidth(), bitmap.getHeight());  
  31.                mDrawable.setLevel(1);  
  32.                // i don‘t know yet a better way to refresh TextView  
  33.                // mTv.invalidate() doesn‘t work as expected  
  34.                CharSequence t = mTv.getText();  
  35.                mTv.setText(t);  
  36.            }  
  37.        }  
  38.    }  

目前还不是很了解这个LevelListDrawable,不知道这个addLevel(int low, int high, Drawable drawable)里的low和hight有什么用途,但是官网有个例子


[html] view plaincopy
  1. <level-list xmlns:android="http://schemas.android.com/apk/res/android">  
  2.   <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1" />  
  3.   <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2" />  
  4.   <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3" />  
  5.   <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4" />  
  6.  </level-list>  

可能和这里的maxLevel有关,官网说android的手机充电的效果图就是使用这个类实现的,然后循环实现LevelListDrawable.setLevel(int)方法的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。