使用LevelListDrawable实现Html.fromHtml多张图片显示
2015-05-12 16:10
549 查看
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)方法里面实现
[java] view
plaincopy
LevelListDrawable d = new LevelListDrawable();
rawable 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类是一个异步加载类,详见代码了
[java] view
plaincopy
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有什么用途,但是官网有个例子
[html] view
plaincopy
<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)方法的。
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)方法里面实现
[java] view
plaincopy
LevelListDrawable d = new LevelListDrawable();
rawable 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类是一个异步加载类,详见代码了
[java] view
plaincopy
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有什么用途,但是官网有个例子
[html] view
plaincopy
<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)方法的。
相关文章推荐
- 使用LevelListDrawable实现Html.fromHtml多张图片显示
- 使用LevelListDrawable实现Html.fromHtml多张图片显示
- 使用LevelListDrawable实现Html.fromHtml多张图片显示
- TextView使用html.fromhtml加载html并显示图片
- asp.net中使用Uploadify插件实现多张图片上传,上传后可显示缩略图、删除图片
- Html中使用自定义图片来实现checkbox显示
- Html中使用自定义图片来实现checkbox显示的方法
- apach poi实现doc转html图片显示问题
- 使用PIL实现多张图片垂直合并
- [Android]Html.from()中ImageGetter异步加载并显示图片和替换标签处理效果
- 使用dialogfragment显示多张图片
- 使用TransitionDrawable实现多张图片淡入淡出的效果
- 【转】Android 使用ViewPager实现类似gallery画廊的效果(画廊效果之ViewPager显示多个图片)
- Android 使用开源库StickyGridHeaders来实现带sections和headers的GridView显示本地图片效果
- Android 使用ViewPager实现左右循环滑动图片和显示当前页码
- Android 使用开源库StickyGridHeaders来实现带sections和headers的GridView显示本地图片效果
- 论TextView的超链接使用、显示表情、Html语法支持、跑马灯效果的实现
- 使用GridView以表格形式显示多张图片
- 使用HTML.ActionLink实现一个图片链接
- Android TextView使用HTML处理字体样式、显示图片等