前言

在Android项目中由于是社交类的项目,所以里面用到了表情,表情是emoji表情,所以实现了之后,弄个demo分享一下,主要实现了表情的选择和显示,只是一个demo,剩下的靠大家自己去扩展

国际惯例,先来个效果

demo比较简单,就是展示表情并且点击之后显示在TextView上,如果你不会,那就往下一起做吧!

xml布局

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.yoursecondworld.emojidemo.MainActivity">

android:id="@+id/tv"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_above="@+id/rv"

android:text="我是TextView" />

android:id="@+id/rv"

android:layout_width="match_parent"

android:layout_height="200dp"

android:layout_alignParentBottom="true" />

列表是使用的是v7包里面的RecyclerView控件,然后上面有一个文本控件

列表使用的item的xml布局

android:layout_width="wrap_content"

android:layout_height="wrap_content">

android:id="@+id/iv"

android:layout_width="32dp"

android:layout_height="32dp"

android:layout_centerInParent="true"

android:src="@mipmap/emoji_0" />

Activity中代码

public class MainActivity extends AppCompatActivity {

private RecyclerView rv = null;

private TextView tv = null;

/**

* 显示表情的适配器

*/

private CommonRecyclerViewAdapter adapter = null;

/**

* 管理表情的布局管理器

*/

private StaggeredGridLayoutManager layoutManager = null;

/**

* 显示的数据

*/

private List data = new ArrayList();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//初始化列表控件

rv = (RecyclerView) findViewById(R.id.rv);

tv = (TextView) findViewById(R.id.tv);

//添加emoji表情资源

addAllEmogi();

rv.setBackgroundColor(Color.GRAY);

//创建适配器

adapter = new SelectEmojiFragmentAdapter(this, data);

//创建布局管理器

layoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.HORIZONTAL);

rv.setLayoutManager(layoutManager);

//创建条目间隔

EmojiSpaceItemDecoration itemDecoration = new EmojiSpaceItemDecoration();

rv.addItemDecoration(itemDecoration);

//设置适配器

rv.setAdapter(adapter);

adapter.setOnRecyclerViewItemClickListener(new CommonRecyclerViewAdapter.OnRecyclerViewItemClickListener() {

@Override

public void onItemClick(View v, int position) {

SpannableString s = new SpannableString("emoji");

ImageSpan i = new ImageSpan(MainActivity.this, data.get(position));

s.setSpan(i, 0, 5, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.append(s);

}

});

}

/**

* 加入所有表情

*/

private void addAllEmogi() {

data.add(R.mipmap.emoji_0);

data.add(R.mipmap.emoji_1);

data.add(R.mipmap.emoji_2);

data.add(R.mipmap.emoji_3);

data.add(R.mipmap.emoji_4);

data.add(R.mipmap.emoji_5);

data.add(R.mipmap.emoji_6);

data.add(R.mipmap.emoji_7);

data.add(R.mipmap.emoji_8);

data.add(R.mipmap.emoji_9);

data.add(R.mipmap.emoji_10);

data.add(R.mipmap.emoji_11);

data.add(R.mipmap.emoji_12);

data.add(R.mipmap.emoji_13);

data.add(R.mipmap.emoji_14);

data.add(R.mipmap.emoji_15);

data.add(R.mipmap.emoji_16);

data.add(R.mipmap.emoji_17);

data.add(R.mipmap.emoji_18);

data.add(R.mipmap.emoji_19);

data.add(R.mipmap.emoji_20);

data.add(R.mipmap.emoji_21);

data.add(R.mipmap.emoji_22);

data.add(R.mipmap.emoji_23);

data.add(R.mipmap.emoji_24);

data.add(R.mipmap.emoji_25);

data.add(R.mipmap.emoji_26);

data.add(R.mipmap.emoji_27);

data.add(R.mipmap.emoji_28);

data.add(R.mipmap.emoji_29);

data.add(R.mipmap.emoji_30);

data.add(R.mipmap.emoji_31);

data.add(R.mipmap.emoji_32);

data.add(R.mipmap.emoji_33);

data.add(R.mipmap.emoji_34);

data.add(R.mipmap.emoji_35);

data.add(R.mipmap.emoji_36);

data.add(R.mipmap.emoji_37);

data.add(R.mipmap.emoji_38);

data.add(R.mipmap.emoji_39);

data.add(R.mipmap.emoji_40);

data.add(R.mipmap.emoji_41);

data.add(R.mipmap.emoji_42);

data.add(R.mipmap.emoji_43);

data.add(R.mipmap.emoji_44);

data.add(R.mipmap.emoji_45);

data.add(R.mipmap.emoji_46);

data.add(R.mipmap.emoji_47);

data.add(R.mipmap.emoji_48);

data.add(R.mipmap.emoji_49);

data.add(R.mipmap.emoji_50);

data.add(R.mipmap.emoji_51);

data.add(R.mipmap.emoji_52);

data.add(R.mipmap.emoji_53);

data.add(R.mipmap.emoji_54);

data.add(R.mipmap.emoji_55);

data.add(R.mipmap.emoji_56);

data.add(R.mipmap.emoji_57);

data.add(R.mipmap.emoji_58);

data.add(R.mipmap.emoji_59);

data.add(R.mipmap.emoji_60);

data.add(R.mipmap.emoji_61);

data.add(R.mipmap.emoji_62);

data.add(R.mipmap.emoji_63);

data.add(R.mipmap.emoji_64);

data.add(R.mipmap.emoji_65);

data.add(R.mipmap.emoji_66);

data.add(R.mipmap.emoji_67);

data.add(R.mipmap.emoji_68);

data.add(R.mipmap.emoji_69);

data.add(R.mipmap.emoji_70);

data.add(R.mipmap.emoji_71);

data.add(R.mipmap.emoji_72);

data.add(R.mipmap.emoji_73);

data.add(R.mipmap.emoji_74);

data.add(R.mipmap.emoji_75);

data.add(R.mipmap.emoji_76);

data.add(R.mipmap.emoji_77);

data.add(R.mipmap.emoji_78);

data.add(R.mipmap.emoji_79);

data.add(R.mipmap.emoji_80);

data.add(R.mipmap.emoji_81);

data.add(R.mipmap.emoji_82);

data.add(R.mipmap.emoji_83);

data.add(R.mipmap.emoji_84);

data.add(R.mipmap.emoji_85);

data.add(R.mipmap.emoji_86);

data.add(R.mipmap.emoji_87);

data.add(R.mipmap.emoji_88);

data.add(R.mipmap.emoji_89);

data.add(R.mipmap.emoji_90);

data.add(R.mipmap.emoji_91);

data.add(R.mipmap.emoji_92);

data.add(R.mipmap.emoji_93);

data.add(R.mipmap.emoji_94);

data.add(R.mipmap.emoji_95);

data.add(R.mipmap.emoji_96);

data.add(R.mipmap.emoji_97);

data.add(R.mipmap.emoji_98);

data.add(R.mipmap.emoji_99);

data.add(R.mipmap.emoji_100);

data.add(R.mipmap.emoji_101);

data.add(R.mipmap.emoji_102);

data.add(R.mipmap.emoji_103);

data.add(R.mipmap.emoji_104);

data.add(R.mipmap.emoji_105);

data.add(R.mipmap.emoji_106);

data.add(R.mipmap.emoji_107);

data.add(R.mipmap.emoji_108);

data.add(R.mipmap.emoji_109);

data.add(R.mipmap.emoji_110);

data.add(R.mipmap.emoji_111);

data.add(R.mipmap.emoji_112);

data.add(R.mipmap.emoji_113);

data.add(R.mipmap.emoji_114);

data.add(R.mipmap.emoji_115);

data.add(R.mipmap.emoji_116);

data.add(R.mipmap.emoji_117);

data.add(R.mipmap.emoji_118);

data.add(R.mipmap.emoji_119);

data.add(R.mipmap.emoji_120);

data.add(R.mipmap.emoji_121);

data.add(R.mipmap.emoji_122);

data.add(R.mipmap.emoji_123);

data.add(R.mipmap.emoji_124);

data.add(R.mipmap.emoji_125);

data.add(R.mipmap.emoji_126);

data.add(R.mipmap.emoji_127);

data.add(R.mipmap.emoji_128);

data.add(R.mipmap.emoji_129);

}

}

可以看到我们有一个方法很长,就是添加表情的id到我们的集合中去的,因为要在列表中显示嘛!

布局管理器用了v7包里面自带的StaggeredGridLayoutManager,有横向和纵向的GridView的效果

适配器为了快速,使用了通用适配器,如果不明白的可以参看我另一篇博客,传送门:

适配器的代码

/**

* Created by cxj on 2016/7/30.

* 显示表情的适配器

*/

public class SelectEmojiFragmentAdapter extends CommonRecyclerViewAdapter {

/**

* 构造函数

*

* @param context 上下文

* @param data 显示的数据

*/

public SelectEmojiFragmentAdapter(Context context, List data) {

super(context, data);

}

@Override

public void convert(CommonRecyclerViewHolder h, Integer entity, int position) {

h.setImage(R.id.iv, entity);

}

@Override

public int getLayoutViewId(int viewType) {

return R.layout.item;

}

}h.setImage(R.id.iv, entity);这句代码其实就是获取了item中的ImageView控件,然后设置了图片资源,这里只不是被封装了罢了,你们可以使用原始的

在Activity里面注册的item点击事件里面,我们创建了一个可扩展的字符串,他是显示表情的最关键的东西.至于它怎么使用的,麻烦大家自己去查阅吧,网上用法很多,这里就不复制用法过来了

还是老规矩,下面放出源码下载

android表情面板怎么做,Android 表情面板的展示和表情的显示相关推荐

  1. android支付宝余额怎么做,android实现类似于支付宝余额快速闪动的效果

    效果如下: 此图片不会动,但实际上是会快速跳动的. 之前看到有支付宝的效果非常牛逼.就是进去看到余额呼噜噜的直接上蹿下跳到具体数字,效果帅,但不知道怎么实现,最近终于知道了. 思路: 首先经常用到倒计 ...

  2. android支付宝余额怎么做,android编程实现类似于支付宝余额快速闪动效果的方法...

    本文实例讲述了android编程实现类似于支付宝余额快速闪动效果的方法.分享给大家供大家参考,具体如下: 效果如下: 此图片不会动,但实际上是会快速跳动的. 之前看到有支付宝的效果非常牛逼.就是进去看 ...

  3. android ota功能,如何做android应用的OTA升级

    现有的框架好像没见过,说下具体的实现思路 1.app在启动的时候去指定的url上拿去一个版本配置文件,这个配置文件可以是txt或者json或者xml格式,根据个人爱好决定. 主要的字段有 appVer ...

  4. android支付宝余额怎么做,android实现类似于支付宝余额快速闪动的效果 -电脑资料...

    思路: 首先经常用到倒计时操作, 增加的数字和间隔!你懂.继续..然后让他快速从一定数字跳动到具体的总额数字,无废话了..看Demo看效果 代码: 直接调用执行: private void initA ...

  5. Android腾讯微博客户端开发四:微博发送篇(QQ表情,@搜索)

    凌晨发帖不容易啊, :cry: 有一个问题,谁做过android的自定义表情啊?貌似还没有发现有客户端有,都是图片,如果能像在电脑上那样自定义表情的功能多好,那位大哥知道,麻烦告知一声,呵呵.写完,睡 ...

  6. android添加文本框代码,Android输入框添加emoje表情图标的实现代码

    前言 再次写聊天的时候才发现,代码积累是一件非常重要的事情,就如这篇博客的意图其实就是代码积累的目的,其实没什么难度,但是一件很琐碎的事情真的也需要时间去完成和调试,所以,获取你在写一个功能的时候会觉 ...

  7. android人脸情绪识别器,基于Android平台的人脸表情识别系统的设计与实现

    摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...

  8. android 轻松实现在线即时聊天【图片、语音、表情、文字】等!含源码!

    之前做够在线及时聊天,小型企业基本上都是通过xmpp协议实现,但是我之前公司做的多多少少会出现一些问题,今天在查找资料的时候,无意发现了一个很好的东西,某公司开发了一套即时聊天sdk,虽然也是由xmp ...

  9. 关于做Android+J2ee系统集成开发的一点心得

    前言: 很早以前,就听人说过android以后会火起来,作为一个前瞻性,对它有所了解会是一个转型的好机会.javaweb太成熟饱和了,现在市面上各种android手机层出不穷,网上各种android视 ...

最新文章

  1. 苹果CEO乔布斯如何工作
  2. python编程视频-Python开发视频百度就得看这个!
  3. 新增的querySelector、querySelectorAll测试
  4. IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boo
  5. 数据挖掘 pandas基础入门之查看数据
  6. idea新建springboot后端到前端_码云开源项目:利用SpringBoot+Vue 实现留言版
  7. Kubernetes 在宜信落地实践
  8. Some exceptional case in WebUI Component Repository Information System Design
  9. python-发邮件脚本
  10. python生成数字_Python生成数字图片代码分享
  11. DM8168的SPI接口
  12. SMP IRQ affinity
  13. 大数据分析推动业务增长的方法有哪些
  14. 51单片机LCD12864程序移植到STM32F103C
  15. java文件保险柜,java
  16. 集成百度做敏感词鉴定
  17. app登录策略实现(短信+一键登录+微信+微信小程序+抖音+抖音小程序)
  18. 自建ngrok服务支持https访问
  19. 奋斗吧之“和loser对话”小故事
  20. zbb20170630 web项目发布至tomcat的ROOT下方法(开发环境和部署环境)

热门文章

  1. flutter 让TextFeild可以根据输入法上移
  2. css 边框流光效果
  3. vue中代理服务器使用
  4. Java中condition的用法_java condition 使用
  5. 关于考研如何准备、复习及注意事项
  6. java中求素数的几种方法汇总及比较
  7. 为什么 TCP 三次握手期间,客户端和服务端的初始化序列号要求不一样?
  8. 安装Visio与已安装的office冲突的解决方案
  9. “狼图腾”精彩动画视频获Adobe Flash开发大赛“视频类”二等奖
  10. AI驱动的智能图形应用