android表情面板怎么做,Android 表情面板的展示和表情的显示

前言

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

国际惯例,先来个效果

0818b9ca8b590ca3270a3433284dd417.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值