类似qq聊天表情实现

android qq上有这样的功能,点击表情,然后输入框EditText上显示表情微笑,博客,论坛上也有这样的功能。有些是显示qq表情的代表符号洳:“:()”这样的符号

先是从网上搜索了一下,有好几种,不过我采取ImageSapn和SpannableString来实现的。

像qq一样,先点击表情按钮,弹出表情选择view(GridView)

然后点击某一个表情,EditText上显示表情图片。

看代码:

     传入参数:position,是表情选择GridView的position

     ChatEmotion 是一个内部类,封装了图片R.drawable.xxxx数组EMO_IMAGES,还有每个聊天表情的文字代表EMO_SYMBOLS:()#@:;这样一堆符号

      这个函数返回的是SpanableString

       private SpannableString getImageSpannableString(int position){
        
        Drawable drawable = getResources().getDrawable(ChatEmotion.EMO_IMAGES[position]);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        //需要处理的文本,ChatEmotion.EMO_SYMBOLS[position]是需要被替代的文本  
        SpannableString ss = new SpannableString(ChatEmotion.EMO_SYMBOLS[position]);
        //要让图片替代指定的文字就要用ImageSpan
        ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BOTTOM);
        //开始替换,注意第2和第3个参数表示从哪里开始替换到哪里替换结束(start和end)  
        //最后一个参数类似数学中的集合,[5,12)表示从5到12,包括5但不包括12  
        Log.d(TAG, String.valueOf(ChatEmotion.EMO_SYMBOLS[position].length()));
        ss.setSpan(imageSpan, 0, ChatEmotion.EMO_SYMBOLS[position].length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return ss;
    }

   
然后调用EditText的setText(getImageSpannableSting(position))就可以显示表情了,是不是很兴奋,哈哈

在GridView也就是表情选择View,表象上看上去像个dialog,其实是个GridView

mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                int currentPos = mEditView.getSelectionStart();
                SpannableStringBuilder ssb = new SpannableStringBuilder();
               ssb.append(getImageSpannableString(position));
               mEditView.getText().insert(currentPos, SpannableString.valueOf(ssb));
                mEditView.invalidate();
            }
            
        });

打工告成



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
小明用基于socket通道做了一个实时聊天实现了多客户客户端、服务端的实时通信,但是老师要求每个人都有自己的独特功能........于是,小明想,创新是不可能创新的,那现在QQ的工鞥有什么能够移植的呢,,,小明效果了一圈,发现大多功能都是基于文件传输,去找了一下socket的文件传输,果断撂挑子。还有什呢,要不就自己客户端约定好,特殊的字符串表示特殊操作,比如下面小明要举个例子:                                                                                                                                   有两个客户端A、B,客户端都是一模一样的,里面资源实现存放好10张图片,并且约定:发送消息为“@”的时候,这个字符串后边会跟着一个数字,咱们两个同时把数字代表编号的图片输出到聊天框,如                                                                A发送给B:@     那现在,两个客户端就会把3号图片输出到聊天框,造成发送的是图片的假象 说干就干,先实现自己窗口判断输出图片,在获取于是先在获取聊天输入区文本时做判断(我正添加表情按钮,到时候就不用记住暗号了),在输出相应编号图片,欸不对啊,这个聊天信息展示区是个文本框啊,那就给改成面板,使用新建面板类,使用流式布局规定布局宽度(不然他会横着输出消息)然后是面板添加滚动条,然后再聊天区打出来就好了 ----(一个积分,望土豪点一点,我也想恰饭) 你们看到这个代码的时候,我主页应该就有相关博文了,大家可以去参考

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值