职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 651|回复: 2

Android腾讯微薄客户端开发六:给用户加VIP认证以及美化微博显示内容

[复制链接]
hxy 发表于 2011-8-7 10:23 | 显示全部楼层 |阅读模式
哈哈,通过VIP标志看到赵薇是冒牌的,李开复和冯小刚是正品。
2ca252b7-815d-3d53-a86b-50c81e7392b6.jpg
##之间的内容是代表一个话题,@和:之间的是转发这条微博的人,也高亮显示,||代表上一次转发此微博的。url地址也高亮显示。

ee856e44-9dae-39fd-84c7-26859cca1114.jpg
这个是什么组件啊?是TextView,不会吧?TextView能显示图片吗?肯定能呀。

510ab1be-f06a-36dc-9551-cb1b9d4d5732.jpg

主要是用到了SpannableString,ForegroundColorSpan,ImageSpan这3个类.

Java代码  
String origtext = data.getString("origtext");   
                    SpannableString spannable = new SpannableString(origtext);   
                       
                    spannable = TextUtil.decorateFaceInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("\/[一-龥a-zA-Z]{1,3}")), getResources());//解析成本地表情   
                    spannable = TextUtil.decorateRefersInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("@.*:")), getResources());//高亮显示微薄转发,回复者昵称  

String origtext = data.getString("origtext");
                                        SpannableString spannable = new SpannableString(origtext);
                                       
                                        spannable = TextUtil.decorateFaceInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("\/[一-龥a-zA-Z]{1,3}")), getResources());//解析成本地表情
                                        spannable = TextUtil.decorateRefersInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("@.*:")), getResources());//高亮显示微薄转发,回复者昵称

Java代码  
public static List<Map<String,Object>> getStartAndEndIndex(String sourceStr,Pattern pattern){   
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();   
        Matcher matcher = pattern.matcher(sourceStr);   
        boolean isFind = matcher.find();   
        while (isFind) {   
            Map<String,Object> map = new HashMap<String, Object>();   
            String faceName = matcher.group().substring(1,matcher.group().length());//表情名称   
            map.put("startIndex",matcher.start());   
            map.put("endIndex",matcher.end());   
            map.put("faceName",faceName);   
            list.add(map);   
            isFind = matcher.find((Integer)map.get("endIndex")-1);   
        }   
        return list;   
    }  

public static List<Map<String,Object>> getStartAndEndIndex(String sourceStr,Pattern pattern){
                List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
                Matcher matcher = pattern.matcher(sourceStr);
                boolean isFind = matcher.find();
                while (isFind) {
                        Map<String,Object> map = new HashMap<String, Object>();
                        String faceName = matcher.group().substring(1,matcher.group().length());//表情名称
                        map.put("startIndex",matcher.start());
                        map.put("endIndex",matcher.end());
                        map.put("faceName",faceName);
                        list.add(map);
                        isFind = matcher.find((Integer)map.get("endIndex")-1);
                }
                return list;
        }
Java代码  
public static SpannableString decorateVipInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){   
        int size = list.size();   
        Drawable drawable = null;   
        if(list!=null&&list.size()>0){   
            for(int i=0;i<size;i++){   
                Map<String,Object> map = list.get(i);   
                drawable = resources.getDrawable(R.drawable.vip);   
                drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());   
                ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);   
                spannable.setSpan(span, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);   
            }   
        }   
        return spannable;   
    }   
      
    public static SpannableString decorateTopicInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){   
        int size = list.size();   
        Drawable drawable = null;   
        CharacterStyle foregroundColorSpan=new ForegroundColorSpan(Color.argb(255, 33, 92, 110));   
        if(list!=null&&list.size()>0){   
            for(int i=0;i<size;i++){   
                Map<String,Object> map = list.get(i);   
                spannable.setSpan(foregroundColorSpan, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);   
            }   
        }   
        return spannable;   
    }  

public static SpannableString decorateVipInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){
                int size = list.size();
                Drawable drawable = null;
                if(list!=null&&list.size()>0){
                        for(int i=0;i<size;i++){
                                Map<String,Object> map = list.get(i);
                                drawable = resources.getDrawable(R.drawable.vip);
                                drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
                                ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);
                                spannable.setSpan(span, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                        }
                }
                return spannable;
        }
       
        public static SpannableString decorateTopicInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){
                int size = list.size();
                Drawable drawable = null;
                CharacterStyle foregroundColorSpan=new ForegroundColorSpan(Color.argb(255, 33, 92, 110));
                if(list!=null&&list.size()>0){
                        for(int i=0;i<size;i++){
                                Map<String,Object> map = list.get(i);
                                spannable.setSpan(foregroundColorSpan, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                        }
                }
                return spannable;
        }


2ca252b7-815d-3d53-a86b-50c81e7392b6-thumb.jpg
ee856e44-9dae-39fd-84c7-26859cca1114-thumb.jpg
510ab1be-f06a-36dc-9551-cb1b9d4d5732-thumb.jpg
走失的猫咪 发表于 2011-8-7 10:23 | 显示全部楼层
你的界面做得很好 界面部分能开源吗 想学习一下

jinchang 发表于 2011-8-7 10:23 | 显示全部楼层
trial989 写道
你的界面做得很好 界面部分能开源吗 想学习一下

谢谢夸奖,最近几天会开源的。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-2 20:48 , Processed in 0.133153 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表