TextView加载HTML数据(网络图片以及图片点击事件的实现)
来源:互联网 发布:普通disco视频软件 编辑:程序博客网 时间:2024/06/06 19:32
TextView加载HTML数据网络图片以及图片点击事件的实现
1 前言
申明:博主原创
转载请 注明出处:http://blog.csdn.net/qq_33804553/article/details/52196055
TextView可以通过Html.fromHtml()方法加载 网页数据,但是在4.0以后 加载的网络图片,就不能显示了,只有一个很小的方块,这篇文章就是为了解决这个问题,并且 为 图片加上点击事件,就比如说加载下面的网页数据
<p style=\"text-align:center;color:#3E3E3E;font-family:"font-size:16px;background-color:#FFFFFF;\"> <span style=\"font-size:18px;\"><img src=\"http://img4.imgtn.bdimg.com/it/u=42046925,1559346389&fm=11&gp=0.jpg" /><br /></span> </p><p style=\"color:#3E3E3E;font-family:"font-size:16px;background-color:#FFFFFF;\"><span style=\"font-size:18px;\">今年6月份,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX。</span> </p>
基础知识的话,大家可以去百度,这里只说实现.时间有限,而且 是在 公司的项目 里 实现的,SO,没有demo,没有效果图
2 前提
- 采用ImageLoader作为加载网络图片框架,方便快捷
- 为了实现点击事件,TextView必须进行 一下两行代码的初始化
tv.setClickable(true); tv.setMovementMethod(LinkMovementMethod.getInstance());
3 详细实现
3.1首先定义一个Drable类,用来绘制图片
import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.drawable.BitmapDrawable;public class URLDrawable extends BitmapDrawable { protected Bitmap bitmap; @Override public void draw(Canvas canvas) { if (bitmap != null) { canvas.drawBitmap(bitmap, getBounds().left, getBounds().top, getPaint()); } }}
3.2 定义自己的Html.ImageGetter,实现图片的加载,缩放等
import android.content.Context;import android.graphics.Bitmap;import android.graphics.Matrix;import android.graphics.drawable.Drawable;import android.text.Html;import android.util.Log;import android.view.View;import android.widget.TextView;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;public class URLImageParser implements Html.ImageGetter { TextView mTextView; Context context; public URLImageParser(TextView textView, Context context) { this.mTextView = textView; this.context = context; } @Override public Drawable getDrawable(String source) { final URLDrawable urlDrawable = new URLDrawable(); Log.d("ChapterActivity", source); ImageLoader.getInstance().loadImage(source, new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {// Bitmap resultBitMap = zoomBitMap(loadedImage); Bitmap resultBitMap = loadedImage; urlDrawable.bitmap = resultBitMap; urlDrawable.setBounds((mTextView.getWidth()-resultBitMap.getWidth())/2, 0, (mTextView.getWidth()-resultBitMap.getWidth())/2+resultBitMap.getWidth(), resultBitMap.getHeight()); mTextView.invalidate(); mTextView.setText(mTextView.getText()); // 解决图文重叠 } }); return urlDrawable; } /** * 完成适配 * 缩放 bitmap,由于还要考虑到放大倍数越大清晰度越低 和 图片太大显示不完整 的问题,还需要做详细的设计 * * @param bitmap * @return */ public Bitmap zoomBitMap(Bitmap bitmap) { float withTV = mTextView.getWidth(); float withBM = bitmap.getWidth(); Log.e("aaa", "withTV:" + withTV + "--withBM:" + withBM); float zoomNumb = withTV / withBM; Log.e("aaa", "zoomNumb:" + zoomNumb); Matrix matrix = new Matrix(); matrix.postScale(zoomNumb, zoomNumb); //长和宽放大缩小的比例 Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); return resizeBmp; }}
3.3 最后实现 TagHandler,实现 图片 点击事件 的绑定
import android.content.Context;import android.text.Editable;import android.text.Html;import android.text.Spanned;import android.text.style.ClickableSpan;import android.text.style.ImageSpan;import android.util.Log;import android.view.View;import android.widget.Toast;import org.xml.sax.XMLReader;import java.util.Locale;public class MyTagHandler implements Html.TagHandler { private Context mContext; public MyTagHandler(Context context) { mContext = context.getApplicationContext(); } @Override public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) { //处理标签<img> if (tag.toLowerCase(Locale.getDefault()).equals("img")) { // 获取长度 int len = output.length(); // 获取图片地址 ImageSpan[] images = output.getSpans(len - 1, len, ImageSpan.class); String imgURL = images[0].getSource(); Log.e("imgURL", imgURL); // 使图片可点击并监听点击事件 output.setSpan(new ClickableImage(mContext, imgURL), len - 1, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } } private class ClickableImage extends ClickableSpan { private String url; private Context context; public ClickableImage(Context context, String url) { this.context = context; this.url = url; } @Override public void onClick(View widget) { // 进行图片点击之后的处理 Toast.makeText(context, "图片点击", Toast.LENGTH_SHORT).show(); Log.e("img_click", url); } }}
4 最后在代码中使用
MyTagHandler myTagHandler=new MyTagHandler(this); String urlDataString="<p style=\"text-align:center;color:#3E3E3E;font-family:'font-size:16px;background-color:#FFFFFF;\'> <span style=\"font-size:18px;\"><img src=\"http://img4.imgtn.bdimg.com/it/u=42046925,1559346389&fm=11&gp=0.jpg\" alt=\"\" /><br /></span> </p><p style=\"color:#3E3E3E;font-family:'font-size:16px;background-color:#FFFFFF;\'><span style=\"font-size:18px;\">今年6月份,国家卫计委会同药监局、中医药管理局、工商总局、中央军委后勤保障部卫生局、武警部队后勤部、全国妇联等部门联合召开会议,部署在全国整治“两非”,也即整治“非医学需要的胎儿性别鉴定和选择性别人工终止妊娠”行为。</span> </p>"; tv.setText(Html.fromHtml(urlDataString, new URLImageParser(tv,this), myTagHandler));
0 0
- TextView加载HTML数据(网络图片以及图片点击事件的实现)
- android textView 加载HTML 异步加载网络图片
- android textView 加载HTML 异步加载网络图片
- TextView加载带图片的Html解决方案
- Android点滴---TextView,RadioButton 设置 HTML文本,加载网络图片
- Android点滴---TextView,RadioButton 设置 HTML文本,加载网络图片
- webView加载的图片添加点击事件
- TextView + Spanned实现图文混排以及图片点击交互
- Android中WebView加载Html中的图片添加点击事件
- 实现网络图片的加载
- Android通过请求网络数据实现ListView,ListView的优化、图片的缓存、子控件的点击事件。
- textview不同颜色字体点击事件图片2
- TextView展示Html内可点击图片
- Android 详解实现TextView加载带图片标签的Html并按比例缩放
- MFC 图片控件图片加载以及鼠标移动事件和鼠标点击事件
- Android TextView 显示网络图片,点击放大
- Html.ImageGetter() textview加载图片 出现[obj]的问题
- TextView使用自定义HtmlHttpImageGetter实现异步加载网络图片,可限制加载图片数量
- PHP中的文件操作
- android错误之 Caused by: android.content.res.Resources$NotFoundException: File res/anim/snailanim.xml f
- Leetcode Invert Binary Tree
- Python基础运算符、字符串
- markdown编辑器
- TextView加载HTML数据(网络图片以及图片点击事件的实现)
- Python 局部变量与全局变量
- 使用setvbuf更改printf的默认buffer 行为
- rpm安装mysql5.6
- Android中startActivityForResult竟然不起作用了....
- windows下动态库遇见的问题总结
- 在Ubuntu 12.04上安装LTIB及编译Linux BSP
- HDU - 5256 序列变换 【LIS变形】
- S重构重命名的快捷键