zoukankan      html  css  js  c++  java
  • 使用LevelListDrawable实现Html.fromHtml多张图片显示

    stackoverflow网站果然强大,帮了我不少忙!

    http://stackoverflow.com/questions/16179285/html-imagegetter-textview


    首先一段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)方法里面实现

     LevelListDrawable d = new LevelListDrawable();
    Drawable empty = getResources().getDrawable(R.drawable.ic_launcher);
            d.addLevel(0, 0, empty);
            d.setBounds(0, 0, empty.getIntrinsicWidth(), empty.getIntrinsicHeight());
    
    
            new LoadImage().execute(source, d);


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

     class LoadImage extends AsyncTask<Object, Void, Bitmap> {
    
            private LevelListDrawable mDrawable;
    
            @Override
            protected Bitmap doInBackground(Object... params) {
                String source = (String) params[0];
                mDrawable = (LevelListDrawable) params[1];
                Log.d(TAG, "doInBackground " + source);
                try {
                    InputStream is = new URL(source).openStream();
                    return BitmapFactory.decodeStream(is);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }
    
            @Override
            protected void onPostExecute(Bitmap bitmap) {
                Log.d(TAG, "onPostExecute drawable " + mDrawable);
                Log.d(TAG, "onPostExecute bitmap " + bitmap);
                if (bitmap != null) {
                    BitmapDrawable d = new BitmapDrawable(bitmap);
                    mDrawable.addLevel(1, 1, d);
                    mDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
                    mDrawable.setLevel(1);
                    // i don't know yet a better way to refresh TextView
                    // mTv.invalidate() doesn't work as expected
                    CharSequence t = mTv.getText();
                    mTv.setText(t);
                }
            }
        }


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


    <level-list xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1" />
      <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2" />
      <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3" />
      <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4" />
     </level-list>


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


     

  • 相关阅读:
    TCP 的那些事儿(转载)
    3. 对象在内存中的布局
    GO语言学习之数据类型-->基本类型(字符串)
    GO语言学习之变量and常量
    wrk
    为什么显示消息“错误:您所在国家/地区是禁运国,无法下载 Java”?
    raw.githubusercontent.com 访问不了
    Windows Terminal
    vue:无法加载文件C:UsersAppDataRoaming pmvue.ps1, 在此系统上无法加载脚本
    vue使用过滤改变el-switch开关的状态
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3509007.html
Copyright © 2011-2022 走看看