`
phenom
  • 浏览: 408926 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

新浪微博的表情实现

 
阅读更多
关于表情的实现,sdk里面也提供一个表情的解析类,SmileyParser,,可以利用这个类来处理表情的。

它主要是构造了一个SpannableStringBuilder,然后里面添加ImageSpan,虽然打印出来的字符串与没有经过处理的一样,但经过这个处理后就可以显示图片了,有了ImageSpan,才有表情的显示。



关于微博的表情,可以从api里面下载。表情的格式大概是:

[{"phrase":"[织]","type":"face","url":"http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/41/zz2_org.gif","hot":false,"common":true,"category":"","icon":"http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/41/zz2_thumb.gif","value":"[织]","picid":""},

{"phrase":"[神马]",
"type":"face",
"url":"http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/60/horse2_org.gif",
"hot":false,
"common":true,
"category":"",
"icon":"http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/60/horse2_thumb.gif",
"value":"[神马]",
"picid":""},。。。这样的形式,

表情数量太多了,只解析 "common":true的,就是常用的表情。把里面的图片下载下来就可以用了。 

需要注意的是你的 "phrase":"[织]"这个名字不能随意地更改。关于这个名字对应什么图片是自己控制的,但不保证在其它的程序是显示正常。 

于是我就用一个map来存储:

public static final HashMap<String, Integer> mSmileyMap=new HashMap<String, Integer>();

static {
mSmileyMap.put("[织]", Integer.valueOf(R.drawable.zz2_org));
mSmileyMap.put("[神马]", Integer.valueOf(R.drawable.horse2_org));
mSmileyMap.put("[浮云]", Integer.valueOf(R.drawable.fuyun_org));
mSmileyMap.put("[给力]", Integer.valueOf(R.drawable.geili_org));
mSmileyMap.put("[围观]", Integer.valueOf(R.drawable.wg_org));
mSmileyMap.put("[威武]", Integer.valueOf(R.drawable.vw_org));
mSmileyMap.put("[熊猫]", Integer.valueOf(R.drawable.panda_org));
mSmileyMap.put("[兔子]", Integer.valueOf(R.drawable.rabbit_org));
mSmileyMap.put("[奥特曼]", Integer.valueOf(R.drawable.otm_org));
mSmileyMap.put("[囧]", Integer.valueOf(R.drawable.j_org));

。。。。其它不列出了。上面下载的是原始图片,如果要缩略图可以用 thumb.gif下载 。



然后开始构造表情的解析类:

单例。

构造 。

private AKSmileyParser(Context context) {
mContext=context;
mSmileyTexts=AKSmiley.mSmileyMap.keySet().toArray(new String[0]);
System.out.println("AKSmileyParser:"+mSmileyTexts+" ssm:"+AKSmiley.mSmileyMap.size());
mPattern=buildPattern();
} 

private Pattern buildPattern() {
int length=AKSmiley.mSmileyMap.size();
// Set the StringBuilder capacity with the assumption that the average
// smiley is 3 characters long.
StringBuilder patternString=new StringBuilder(length*3);

System.out.println("buildPattern:"+mSmileyTexts);
// Build a regex that looks like (:-)|:-(|...), but escaping the smilies
// properly so they will be interpreted literally by the regex matcher.
patternString.append("(");
for (String s : mSmileyTexts) {
patternString.append(Pattern.quote(s));
patternString.append('|');
}
// Replace the extra '|' with a ')'
patternString.replace(patternString.length()-1, patternString.length(), ")");

return Pattern.compile(patternString.toString());
}

然后就可以使用了。

初始化:

AKSmileyParser parser=AKSmileyParser.getInstance(this);

用gridview来显示表情。其中

holder.appImage.setImageDrawable(context.getResources().getDrawable(AKSmiley.mSmileyMap.get(list[index]))); 显示图片。


  private String[] list;//这个东西就是表情的key


@Override
public Object getItem(int index) {
return list[index];
}

初始化适配器:mAdapter.setList(AKSmileyParser.getInstance(this).mSmileyTexts);

表情显示成功了:

设置setOnItemClickListener事件:

String oldChar=edit_text.getText().toString();
  Log.d(TAG, "oldChar:"+oldChar);//原始字符

String charToBuild=(String) mAdapter.getItem(position);
  Log.d(TAG, "charToBuild:"+charToBuild);//新加入的字符,这个字符就是用map中的key:[神马]形式的

  int selection=edit_text.getSelectionStart();//需要知道当前选中的位置,因为表情是ImageSpan,不是字符串,所以选中的位置会不正确。
  CharSequence start=oldChar.subSequence(0, selection);//选中位置的开始点,从0开始
CharSequence end=oldChar.subSequence(selection, oldChar.length());
Log.d(TAG, "start:"+start+"---end:"+end+" selection:"+selection);

StringBuilder builder=new StringBuilder(start);
builder.append(charToBuild).append(end);//构造新的字符串,虽然表情用ImageSpan显示,但字符串的内容还是一样的。
int newSel=selection+charToBuild.length();//计算新的选中的光标位置,

AKSmileyParser parser=AKSmileyParser.getInstance(this);
  CharSequence newChar=parser.addSmileySpans(builder);//解析新的字符串,如果只解析新添加的部分,其它的还是会显示成字符串“[神马]”这样的,所以需要重新解析所有的

Log.d(TAG, "newChar:"+newChar+" newSel:"+newSel);

edit_text.setText(newChar);
edit_text.setSelection(newSel);//设置光标的新位置。
txt_text.setText(newChar);
日志显示:
//09-27 11:05:07: D: oldChar:神马[神马] d兔子[兔子]ad嘻嘻[嘻嘻]aa
//09-27 11:05:07: D: charToBuild:[哈哈]
//09-27 11:05:07: D: start:神马[神马] d兔---end:子[兔子]ad嘻嘻[嘻嘻]aa selection:9//在兔子中间插入
//09-27 11:05:07: D: newChar:神马[神马] d兔[哈哈]子[兔子]ad嘻嘻[嘻嘻]aa newSel:13

apk下载,源码暂时没有。稍后提供。上面已经提供了大多数了,部分不全的代码自己补全。




  • 大小: 161.2 KB
分享到:
评论

相关推荐

    2016-06 最新新浪微博表情gif大全

    "2016-06 最新新浪微博表情gif大全"是一个专为新浪微博用户提供的资源集合,包含了当时最新、最流行的表情动图。这个压缩包文件总计包含了1836个gif图像,这些动态表情丰富了用户的互动体验,让用户在发表评论或进行...

    新浪微博表情jQuery插件

    表情功能的实现虽说不难,但却比较繁琐,首先要了解新浪微博开放平台的表情API,然后通过某种方式调用,如果通过网页后台代码直接读取储存到JavaScript变量中,又会拖慢网页加载速度,如果采用AJAX读取,又要解决...

    JQuery新浪微博表情插件(兼容各浏览器)

    《JQuery新浪微博表情插件:跨浏览器的交互增强利器》 在互联网的快速发展中,社交媒体已经成为人们日常交流的重要平台,而微博作为其中的一员,更是深受广大用户的喜爱。为了提升用户体验,许多开发者开始研究如何...

    新浪微博表情1640个,带json引用

    "新浪微博表情1640个,带json引用"这个资源集合是专门为开发者设计的,旨在帮助他们在自己的应用程序中集成丰富的表情功能,提升用户体验。下面将详细讲解这个资源包中的关键知识点。 1. **表情符号**:表情符号是...

    新浪微博表情jQuery插件(jquery.sinaEmotion-1.0)

    《新浪微博表情jQuery插件——jquery.sinaEmotion-1.0详解》 在网页开发中,为了提升用户体验,经常会引入各种各样的JavaScript插件。其中,“新浪微博表情jQuery插件”(jquery.sinaEmotion-1.0)是一个专门用于...

    jquery新浪微博表情插件.rar

    《jQuery实现新浪微博表情插件详解》 在网页交互设计中,表情已经成为用户交流的重要组成部分,尤其是在社交媒体上。本文将深入探讨如何使用jQuery实现一个类似新浪微博的表情插件,以提升用户体验,增强文字信息的...

    jquery新浪微博表情插件特效代码

    本文将深入探讨一款基于jQuery的新浪微博表情插件,通过分析其实现原理和应用方法,帮助开发者提升网页的趣味性和实用性。 首先,我们需要明确jQuery的核心功能:简化DOM操作、事件处理、动画效果和Ajax交互。这个...

    Android最新版新浪微博

    本文将深入探讨Android最新版新浪微博的特点、功能及其在技术实现上的亮点。 首先,Android版新浪微博的界面设计注重用户体验,采用简洁明快的UI布局,使得用户能够快速找到并操作各种功能。在信息流展示上,采用...

    简单的仿新浪微博发布框

    【标题】:“简单的仿新浪微博发布框” 在网页设计和开发中,模拟知名社交媒体平台的界面元素是一种常见的练习,有助于提升开发者的设计感和交互实现能力。本项目“简单的仿新浪微博发布框”就是一个很好的实例,...

    微博表情插件

    总的来说,"jquery新浪微博表情插件"是一个结合了jQuery库、JavaScript语言特性、正则表达式、DOM操作、数据结构、事件处理、动态内容加载等多种技术的前端开发实例。它不仅提升了用户的交互体验,也为开发者提供了...

    jQuery仿新浪微博@功能代码

    【jQuery仿新浪微博@功能代码】是一种常见的前端交互设计,它基于JavaScript库jQuery实现,用于在网页文本输入框中实现类似新浪微博的“@”提及功能。这个功能的主要目的是提高用户在社交媒体或评论系统中的互动体验...

    aspnet 仿新浪微博系统

    本项目“aspnet 仿新浪微博系统”则是一个使用ASP.NET技术实现的微型博客平台,其核心目标是模仿并实现类似于新浪微博的功能。 1. **系统架构** 这个微博系统很可能采用了典型的三层架构设计,包括表现层(UI)、...

    新浪微博iPhone接口版

    《新浪微博iPhone接口版》是一款专为Android用户设计的应用程序,虽然其名称中包含"iPhone",但实际是针对Android平台开发的。这款应用基于新浪微博的2.3.0版本,确保用户可以享受到与iPhone版相近的功能体验,同时...

    jQuery新浪微博发布页面代码.rar_edgeofl_jQuery新浪微博发布页面代码_raisetlb

    在网页开发中,实现类似新浪微博的发布页面功能是一项常见的需求,这涉及到用户输入内容、字数统计、表情选择、图片预览等多个交互环节。本文将详细解析一个基于jQuery的实现方案,帮助开发者理解和构建类似的页面...

    html5新浪微博@功能表情特效

    在这个“html5新浪微博@功能表情特效”项目中,我们将探讨HTML5如何用于实现类似微博平台中的@功能以及表情特效。 一、HTML5的语义化元素 HTML5引入了若干语义化的标签,如`&lt;article&gt;`、`&lt;section&gt;`、`&lt;header&gt;`、`...

    实现自定义的新浪微博

    本项目名为“实现自定义的新浪微博”,旨在利用新浪微博开放的API接口,构建一个具备基本微博功能的应用。这个应用不仅可以让用户浏览微博,还能进行评论、发布等互动操作。下面我们将深入探讨这个项目涉及到的关键...

    新浪微博简单版本

    【描述】:根据描述,这个项目主要是对新浪微博首页功能的复现,实现了用户在浏览微博时可能需要用到的大部分功能。开发者特别指出,除了撰写微博时缺少表情和“#”话题功能之外,其他第一页面展示的功能已经得到了...

    jquery高仿新浪微博图片显示插件

    本篇文章将深入探讨一款基于jQuery的插件,它完美地模仿了新浪微博的图片显示方式,帮助开发者快速实现类似的功能。 首先,我们需要理解jQuery的核心概念。jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历...

Global site tag (gtag.js) - Google Analytics