设为首页 加入收藏

TOP

自定义图文混排视图MyImageTextView(二)
2015-07-24 05:43:57 来源: 作者: 【 】 浏览:10
Tags:定义 图文 MyImageTextView
E); } mContentView.addView(parent, viewIndex); setImage(parent, mImage[index], mImageUrl[index]); } private void setImage(View parent, ImageView iv, String picUrl){ if(picUrl != null && picUrl.trim().length() > 0) { parent.setVisibility(View.VISIBLE); iv.setImageResource(R.drawable.weibo_pic_loading); Size size = setPic(iv, picUrl); if(size.getHeight() > 0 && size.getWidth() > 0) { parent.requestLayout(); } } else{ parent.setVisibility(View.GONE); } } private Size setPic(ImageView logoView, String logoUrl) { //异步加载图片代码略 return XXXFileManager.getInstance().setImageBitmapWithMemoryCache( getContext(), logoView, logoUrl, XXXFileManager.getImagetLrucache(), getContext().getClass().getName(), false); } /** * 供图片下载完毕时调用 * @param fileURL */ public void setPic(String fileURL) { if(mImage != null && mImageUrl != null && !TextUtils.isEmpty(fileURL)) { String source = null; for(int i = 0; i < mImageUrl.length && i < mImage.length; i++) { source = mImageUrl[i]; if(!TextUtils.isEmpty(source)) { if(fileURL.equals(source)) { setPic(mImage[i], source); mImage[i].getParent().requestLayout(); break; } } } } } /** * 设置是否支持超链接点击 */ public void setSupportMovementMethod(Boolean supportMovementMethod) { this.supportMovementMethod = supportMovementMethod; } /** * 设置是否显示图索引 * @param showImageIndex */ public void setShowImageIndex(Boolean showImageIndex) { this.showImageIndex = showImageIndex; } /** * 设置TextView超链接跳转 * @param tv */ private void changeLink(TextView tv){ tv.setMovementMethod(LinkMovementMethod.getInstance()); CharSequence text = tv.getText(); if (text instanceof Spannable) { int end = text.length(); Spannable sp = (Spannable) tv.getText(); URLSpan[] urls = sp.getSpans(0, end, URLSpan.class); if(urls == null || urls.length <= 0) { return; } SpannableStringBuilder style = new SpannableStringBuilder(text); URLSpan[] urlsn = style.getSpans(0, end, URLSpan.class); if(urlsn == null || urls.length != urlsn.length) { return; } //循环把链接发过去 URLSpan url = null; for(int i = 0; i < urls.length && i < urlsn.length; i++) { url = urls[i]; MyURLSpan myURLSpan = new MyURLSpan(getContext(), url.getURL()); style.removeSpan(urlsn[i]); style.setSpan(myURLSpan, sp.getSpanStart(url), sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); } tv.setText(style); } } public int getImageCount() { int cnt = mImageBaseIndex; if(mImage != null && mImageUrl != null) { cnt += mImage.length; } return cnt; } public void setmImageBaseIndex(int baseIndex) { this.mImageBaseIndex = baseIndex; } public CharSequence getmData() { return mData; } }


2.5 MyURLSpan.java:定义一个可点击的Span,点击超链接时通过 浏览器打开改网页/文件。
public class MyURLSpan extends ClickableSpan {
	private Context context = null;
	private String mUrl     = null;;

	public MyURLSpan(Context context,String url) {
		this.context = context;
		this.mUrl = url;
	}

	@Override
	public void onClick(View widget) {
		if (URLUtil.isNetworkUrl(mUrl)) {
			XXXUtils.openMyWebBrowser(this.context,
					this.context.getResources().getString(R.string.newstext_hyperlink),
					this.mUrl);
		}
	}
}


3 使用简单,可以在xml文件中引用,也可以动态创建视图。

3.1 在xml中引用

        
  

            
   
     …… 
     
      
      
      
       
       
       
        
        …… 
       
      
     
   
        
  


3.2 java代码,设置显示内容

		itvFreeContent = (MyImageTextView) this.findViewById(R.id.XXX_Content);
		itvFreeContent.setSupportMovementMethod(true);
		//itvFreeContent.setShowImageIndex(true);
		itvFreeContent.setText(Html.fromHtml(formatContent(content)));

当然这里还需要加入图片异步下载完成后的代码,如:

	private void initHandler() {
		this.mHandler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				switch (msg.what) {
				case KLoadImageOver:
					itvFreeContent.setPic(msg.getData().getString("fileURL"));
					break;
				default:
					break;
				}
			}
		};
	}

实际效果图(截取部分):

\


4 第二种方式需要扩展的是,如果显示的内容有超链接,且超链接时中的显示对象是图片,那么需要给图片增加点击事件,点击的跳转参照MyURLSpan.onClick。

关于图片的下载,这里推荐一个第三方库Android-Universal-Image-Loader。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇零基础学cocos2dx 3.0(顺带学C++.. 下一篇uva:10700 - Camel trading(贪..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: