package com.tekinarslan.material.sample.customui.textview_imggetter;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.text.Editable;
import android.text.Html.TagHandler;
import android.text.Spanned;
import android.text.style.ClickableSpan;
import android.text.style.ImageSpan;
import android.view.View;
import com.apkfuns.logutils.LogUtils;
import org.xml.sax.XMLReader;
import java.io.File;
public class MyTagHandler implements TagHandler {
private Context context;
public MyTagHandler(Context context) {
this.context = context;
}
@Override
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
// TODO Auto-generated method stub
// 处理标签<img>
if (tag.toLowerCase().equals("img")) {
// 获取长度
int len = output.length();
// 获取图片地址
ImageSpan[] images = output.getSpans(len-1, len, ImageSpan.class);
String imgURL = images[0].getSource();
// 使图片可点击并监听点击事件
output.setSpan(new ImageClick(context, imgURL), len-1, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
private class ImageClick extends ClickableSpan {
private String url;
private Context context;
public ImageClick(Context context, String url) {
this.context = context;
this.url = url;
}
@Override
public void onClick(View widget) {
// TODO Auto-generated method stub
// 将图片URL转化为本地路径,可以将图片处理类里的图片处理过程写为一个方法,方便调用
String imageName = Common.md5(url);
String sdcardPath = Environment.getExternalStorageDirectory().toString(); // 获取SDCARD的路径
//获取图片后缀名
String[] ss = url.split("\\.");
String ext = ss[ss.length - 1];
// 最终图片保持的地址
String savePath = sdcardPath + "/" + context.getPackageName() + "/" + imageName + "." + ext;
File file = new File(savePath);
if (file.exists()) {
// 处理点击事件,开启一个新的activity来处理显示图片
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "image/*");
context.startActivity(intent);
}
LogUtils.d("textview----------相应响应点击事件");
}
}
}