工作中碰到需要在textView中显示图片。 及图片放大功能。
//设置mText支持Html 格式的标签, locImageGetter作为Html.Getter的实现类 处理图片
mText.setText(Html.fromHtml(htmlSource,locImgGetter,null);
mText.setMovementMethod(ScrollingMovementMethod.getInstance()); //textView 滚动
//Html.Getter 实现类
ImageGetter locImgGetter = new Html.ImageGetter(){
@Override
public Drawable getDrawable(String source){
Drawable drawable = null;
try{
//本类中的图片保存在本地中
drawable = Drawable.createFromPath(source);
if(drawable !=null){
int macWidth=this.getWindowManager().getDefaultDisplay().getWidth();
int intrWid = drawable.getIntrinsicWidth() > macWidth/2 ? drawable.getIntrinsicWidth() : macWidth/2;
int width = macWidth < intrWid ? macWidth : intrWid;
int height= drawable.getIntrinsicHeight() * width/ drawable.getIntrinsicWidth();
//设置图片位置.
drawable.setBounds(3, 3, width-5, height);
}
}catch(Exception e){
e.printStackTrace();
return null;
}
return drawable;
}
//对该mText设置监听,
}
mText.setOnClickListener(textListener);
private OnClickListener textListener = new OnClickListener(){
@Override
public void onClick(View v){
Spannable s=(Spannable)mText.getText();
mText.setMovementMethod(LinkMovementMethod.getInstance());
ImageSpan [] imageSpans=s.getSpans(0,s.length(),ImageSpan.class);
for(final ImageSpan span: imageSpans){
final String image_src=span.getSource();
final int start = s.getSpanStart(span);
final int end = s.getSpanEnd(span);
ClickableSpan click_span = new ClickableSpan(){
@Override
public void onClick(View widget){
// 当前点击的图片 资源路径
Toast.makeText(context, image_src, Toast.LENGTH_SHORT).show();
}
}
};
ClickableSpan [] click_span=s.getSpans(start,end,ClickableSpan.class);
if(click_spans.length !=0){
for(ClickableSpan c_span : click_spans){
s.removeSpan(c_span);
}
}
s.setSpan(click_span,start,end,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
以上是根据一些技术大牛的博文,总结并运用到自己的实际项目中。
参数文献:
http://stackoverflow.com/questions/16179285/html-imagegetter-textview
http://www.eoeandroid.com/thread-271554-1-13.html?_dsign=1014e8ef