[java]代码库
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]");
// 要让图片替代指定的文字就要用ImageSpan
ImageSpan span = new ImageSpan(mSmile, ImageSpan.ALIGN_BASELINE);
// 开始替换,注意第2和第3个参数表示从哪里开始替换到哪里替换结束(start和end)
// 最后一个参数类似数学中的集合,[5,12)表示从5到12,包括5但不包括12
spannable.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://yuncode.net