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


##之间的内容是代表一个话题,@和:之间的是转发这条微博的人,也高亮显示,||代表上一次转发此微博的。url地址也高亮显示。


这个是什么组件啊?是TextView,不会吧?TextView能显示图片吗?肯定能呀。



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

Java代码 复制代码  收藏代码
  1. String origtext = data.getString("origtext");   
  2.                     SpannableString spannable = new SpannableString(origtext);   
  3.                        
  4.                     spannable = TextUtil.decorateFaceInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("\\/[\u4e00-\u9fa5a-zA-Z]{1,3}")), getResources());//解析成本地表情   
  5.                     spannable = TextUtil.decorateRefersInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("@.*:")), getResources());//高亮显示微薄转发,回复者昵称  
Java代码 复制代码  收藏代码
  1. String origtext = data.getString("origtext");   
  2.                     SpannableString spannable = new SpannableString(origtext);   
  3.                        
  4.                     spannable = TextUtil.decorateFaceInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("\\/[\u4e00-\u9fa5a-zA-Z]{1,3}")), getResources());//解析成本地表情   
  5.                     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("\\/[\u4e00-\u9fa5a-zA-Z]{1,3}")), getResources());//解析成本地表情
spannable = TextUtil.decorateRefersInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("@.*:")), getResources());//高亮显示微薄转发,回复者昵称


Java代码 复制代码  收藏代码
  1. public static List<Map<String,Object>> getStartAndEndIndex(String sourceStr,Pattern pattern){   
  2.         List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();   
  3.         Matcher matcher = pattern.matcher(sourceStr);   
  4.         boolean isFind = matcher.find();   
  5.         while (isFind) {   
  6.             Map<String,Object> map = new HashMap<String, Object>();   
  7.             String faceName = matcher.group().substring(1,matcher.group().length());//表情名称   
  8.             map.put("startIndex",matcher.start());   
  9.             map.put("endIndex",matcher.end());   
  10.             map.put("faceName",faceName);   
  11.             list.add(map);   
  12.             isFind = matcher.find((Integer)map.get("endIndex")-1);   
  13.         }   
  14.         return list;   
  15.     }  
Java代码 复制代码  收藏代码
  1. public static List<Map<String,Object>> getStartAndEndIndex(String sourceStr,Pattern pattern){   
  2.         List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();   
  3.         Matcher matcher = pattern.matcher(sourceStr);   
  4.         boolean isFind = matcher.find();   
  5.         while (isFind) {   
  6.             Map<String,Object> map = new HashMap<String, Object>();   
  7.             String faceName = matcher.group().substring(1,matcher.group().length());//表情名称   
  8.             map.put("startIndex",matcher.start());   
  9.             map.put("endIndex",matcher.end());   
  10.             map.put("faceName",faceName);   
  11.             list.add(map);   
  12.             isFind = matcher.find((Integer)map.get("endIndex")-1);   
  13.         }   
  14.         return list;   
  15.     }  
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代码 复制代码  收藏代码
  1. public static SpannableString decorateVipInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){   
  2.         int size = list.size();   
  3.         Drawable drawable = null;   
  4.         if(list!=null&&list.size()>0){   
  5.             for(int i=0;i<size;i++){   
  6.                 Map<String,Object> map = list.get(i);   
  7.                 drawable = resources.getDrawable(R.drawable.vip);   
  8.                 drawable.setBounds(00, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());   
  9.                 ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);   
  10.                 spannable.setSpan(span, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);   
  11.             }   
  12.         }   
  13.         return spannable;   
  14.     }   
  15.        
  16.     public static SpannableString decorateTopicInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){   
  17.         int size = list.size();   
  18.         Drawable drawable = null;   
  19.         CharacterStyle foregroundColorSpan=new ForegroundColorSpan(Color.argb(2553392110));   
  20.         if(list!=null&&list.size()>0){   
  21.             for(int i=0;i<size;i++){   
  22.                 Map<String,Object> map = list.get(i);   
  23.                 spannable.setSpan(foregroundColorSpan, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);   
  24.             }   
  25.         }   
  26.         return spannable;   
  27.     }  
Java代码 复制代码  收藏代码
  1. public static SpannableString decorateVipInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){   
  2.         int size = list.size();   
  3.         Drawable drawable = null;   
  4.         if(list!=null&&list.size()>0){   
  5.             for(int i=0;i<size;i++){   
  6.                 Map<String,Object> map = list.get(i);   
  7.                 drawable = resources.getDrawable(R.drawable.vip);   
  8.                 drawable.setBounds(00, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());   
  9.                 ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);   
  10.                 spannable.setSpan(span, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);   
  11.             }   
  12.         }   
  13.         return spannable;   
  14.     }   
  15.        
  16.     public static SpannableString decorateTopicInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){   
  17.         int size = list.size();   
  18.         Drawable drawable = null;   
  19.         CharacterStyle foregroundColorSpan=new ForegroundColorSpan(Color.argb(2553392110));   
  20.         if(list!=null&&list.size()>0){   
  21.             for(int i=0;i<size;i++){   
  22.                 Map<String,Object> map = list.get(i);   
  23.                 spannable.setSpan(foregroundColorSpan, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);   
  24.             }   
  25.         }   
  26.         return spannable;   
  27.     }  
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;
}


http://helloandroid.iteye.com/blog/1136290

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55910.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GraphChi之pagerank分析新浪微博用户

GraphChi由卡内基梅隆大学的Aapo Kyrola 博士生开发&#xff0c;是GraphLab项目的一个分支。该框架能够在单机上完成大数据的图计算。 项目地址&#xff1a;https://code.google.com/p/graphchi/ 实例地址&#xff1a;http://code.google.com/p/graphchi/wiki/ExampleApps 其中…

实战新浪微博、腾讯微博的分享功能

算上也是半年前做的,今天翻出来放出来,作为日志记录,也许能帮助一些人。 我做的大概界面是如下图。 主要有两个界面,一个是新浪微博,腾讯微博的分享按钮,一个是他们的绑定情况(其实就是是否授权)。点击微博分享中新浪或腾讯按钮,就进行相应的授权(若没授权),显示微…

微博第三方登录,拿捏了

什么是第三方登录&#xff1f; 用户登录操作不是基于自身建设账号体系&#xff0c;而是基于用户在第三方平台上已有的账号和密码来快速完成登录的过程。下面我列举了几点第三方登录的优点。 极大的简化登录注册的流程。 方便用户快捷登录&#xff0c;降低用户的登录流失率&am…

基于Chrome插件的微博超话自动签到

文章目录 前言一、准备工作二、插件安装1.插件下载2.解压并安装 三、脚本编写(手动获取参数)1.复制脚本2.获取参数3.运行测试 四、脚本编写(自动获取参数)1.复制脚本2.获取参数3.填入参数3.运行测试 总结 前言 不方便使用Chrome插件或对签到结果有通知要求的 请参考 基于Pytho…

微博话题下的数据爬取

1、前言 新浪微博中&#xff0c;一个话题下各个媒体或用户发表在平台发表的信息是舆情研究的一个很重要的数据来源&#xff0c;这里记录一下一个话题下数据的爬取方式&#xff0c;以“#美国疫情#”话题为例。 2、话题下数据爬取 首先参考这篇文章&#xff0c;分析话题下数据爬…

微信微博Facebook们,到底从你身上榨取了什么?

硅谷Live / 实地探访 / 热点探秘 / 深度探讨 如果你不再想从早到晚手机不离身&#xff0c;不再想每小时刷好几遍知乎微博微信 YouTube 和 Instagram&#xff0c;不再想每天被手机分散注意力导致碌碌无为&#xff0c;那这篇文章正是为你准备。 科技公司搜刮你的注意力 在那本著名…

新浪微博PC端登录分析

本来给自己定了个2018的目标&#xff0c;平均每月写两篇文章&#xff0c;现在已经快三月了&#xff0c;第一篇稿子才憋出来&#xff0c;惭愧呀&#xff0c;直入主题吧&#xff0c;今天给大家带来的是新浪微博PC端的模拟登陆。 工具 这次使用的工具是Charles和chrome浏览器&am…

腾讯空间、新浪微博、腾讯微博分享接口

腾讯空间、新浪微博、腾讯微博分享接口。 注意&#xff1a;在网站对接前&#xff0c;请先申请注册好您的QQ登录appid、新浪登录Appkey、腾讯微博appkey。 1、引用JS文件 <script src"http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid&quo…

Android模仿新浪微博(写微博界面)

发布一条新微博接口&#xff1a;http://open.weibo.com/wiki/2/statuses/update 上传图片并发布一条新微博接口&#xff1a;http://open.weibo.com/wiki/2/statuses/upload 1.根据有没有图片来选择相应的接口。 2.根据输入框的改变判断文字数。 3.创建一个girlview显示发送…

android客户端接入新浪、腾讯微博以及人人网

本文原创http://blog.csdn.net/yanbin1079415046&#xff0c;转载请注明出处。 从事android工作也有段时间了&#xff0c;碍于肚子里料不多&#xff0c;一直也没写过什么东西。最近刚好项目中要接入新浪微博&#xff0c;就顺便研究了一下android客户端接入腾讯微博和人人网。由…

【第三方互联】9、新浪微博(sina)授权第三方登录

当我们创建的新浪微博互联应用成功后,我们便可以开始使用该应用来实现新浪微博授权操作 一、获取 App Key 和 App Secret 1、在“我的应用”,点击应用,查看我们创建的应用的基本信息 这样,我们就获取到了 App Key 和 App Secret 2、将 App Key 和 App Secret,以及该应用…

爬取微博上某大v,明星,官微等用户的微博信息的小技巧

通常成功的大门&#xff0c;其实都是虚掩着的 现在大多在爬取微博时&#xff0c;都是采用selenium框架&#xff0c;爬取pc端微博页面&#xff0c;模拟鼠标下拉来解决动态加载的问题&#xff0c;虽然笨拙&#xff0c;但是也能解决问题。今天我给大家推荐个更加好的方法。首先清看…

用ChatGPT可以去微博做个大V了(狗头)

将来用ChatGPT可以去微博做个大V了&#xff08;狗头&#xff09; 体验最近很火的ChatGPT体验了一下&#xff0c;这个OpenAI是真的强。 这小诗写的还挺有意境&#xff0c;网上搜了一下还没看到完全一样的。 现在各大厂商都布局OpenAI&#xff0c;期待更多黑科技。

黄仁勋评价股东孙正义

看NVIDIA人工智能全局&#xff0c;黄仁勋评价股东孙正义 “孙正义是我所知道的唯一能准确预知每一次科技浪潮的人。” 云科技时代 2017/06/18 21:01评论(0) 收藏(0)字体&#xff1a;宋 英伟达孙正义 (黄仁勋在2017台北Computex上) 2017年5月&#xff0c;传出软银悄悄购入40亿美…

英伟达CEO黄仁勋:NFT元宇宙已经到来

在与 Venturebeat 视频游戏记者 Dean Takahashi 的对话中&#xff0c;英伟达&#xff08;Nvidia&#xff09;首席执行官黄仁勋 Jensen Huang 表示&#xff0c;他相信“我们正处于基于区块链的增强现实元宇宙的风口浪尖”。 在周六发表的采访中&#xff0c;这位显卡巨头负责人描…

“核弹”之父——黄仁勋

一抹幽绿&#xff0c;有如眼睛一般的形状——相信已经很难有人不认识NVIDIA那标志性的LOGO了。今天的NVIDIA在显卡领域可谓无人能及&#xff0c;在通用计算和AI领域也留下浓重一笔&#xff0c;而带领NVIDIA取得现在成就的就是NVIDIA的联合创始人、CEO——黄仁勋。 初识老黄 想…

华人“军火专家”——黄仁勋

昨天我们介绍GPU的文章中有提到一位华人&#xff0c;他由于两款产品发热量大到能煎鸡蛋&#xff0c;被游戏玩家戏称为“两弹元勋”“军火专家”&#xff0c;在硅谷被认为是和杰夫贝索斯、伊隆马斯克并驾齐驱的人物&#xff0c;他创办的公司尽管不像智能手机企业、互联网企业那样…

黄仁勋没有回应,英伟达没有新品

晓査 乾明 假装发自 苏州量子位 出品 | 公众号 QbitAI 黄仁勋上台&#xff0c;然后下台。 在今天上午的GTC China大会上&#xff0c;黄教主没能拿出让人惊艳的新品&#xff0c;也没有只字片语回应英伟达的目前的“困境”。 大会之后的采访环节&#xff0c;老黄也没来。 据说是&…

黄仁勋把自己做成了虚拟娃娃

明敏 发自 凹非寺量子位 报道 | 公众号 QbitAI 英伟达是推出黄仁勋手办了吗&#xff1f;&#xff1f;&#xff1f; 看上去还挺可爱的呢。 不过事情可没有这么简单&#xff0c;接下来这一幕或许就会让你大为震撼。 因为&#xff0c;这个萌版老黄&#xff0c;是 会 动 的。 不仅如…

虚拟人是如何制作的?企业专属虚拟形象如何定制打造成虚拟代言?

虚拟数字人是指以数字形式存在于数字空间中&#xff0c;具有拟人或真人的外貌、行为和特点的虚拟人物&#xff0c;也称之为虚拟形象、数字虚拟人等。虚拟数字人核心技术主要包括计算机图形学、动作捕捉、图像渲染、AI等。虚拟数字人可以打造更完美的人设&#xff0c;为品牌带来…