edittext显示表情,edittext表情,原理是将gif先解码成一
分享于 点击 29280 次 点评:103
edittext显示表情,edittext表情,原理是将gif先解码成一
原理是将gif先解码成一张张图片存在内存中 ,然后利用animationDrawable一帧一帧播放。
gHelper.read(getResources().openRawResource(R.drawable.f009));// 得到第一张图片BitmapDrawable bd = new BitmapDrawable(gHelper.getImage());mSmile.addFrame(bd, gHelper.getDelay(0));for (int i = 1; i < gHelper.getFrameCount(); i++) { mSmile.addFrame(new BitmapDrawable(gHelper.nextBitmap()), gHelper.getDelay(i));}mSmile.setBounds(0, 0, bd.getIntrinsicWidth(), bd.getIntrinsicHeight());mSmile.setOneShot(false);bd.setBounds(0, 0, bd.getIntrinsicWidth(), bd.getIntrinsicHeight());// 需要处理的文本,[smile]是需要被替代的文本final SpannableString spannable = new SpannableString(edittext.getText().toString()+ "[smile]");// 要让图片替代指定的文字就要用ImageSpanImageSpan span = new ImageSpan(mSmile, ImageSpan.ALIGN_BASELINE);// 开始替换,注意第2和第3个参数表示从哪里开始替换到哪里替换结束(start和end)// 最后一个参数类似数学中的集合,[5,12)表示从5到12,包括5但不包括12spannable.setSpan(span, edittext.getText().length(), edittext.getText().length()+ "[smile]".length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);edittext.setText(spannable);mSmile.invalidateSelf(); new Thread(new Runnable() { @Override public void run() { while (mRunning) { mSmile.selectDrawable(mFrame++); if (mFrame == mSmile.getNumberOfFrames()) { mFrame = 0; } edittext.postInvalidate(); KT.out(mSmile.isRunning()); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } }}).start();//该片段来自于http://byrx.net
用户点评