字符串中带有emoji表情处理

1:先删除字符然后解析当前字符再显示

edit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

@Override
public void afterTextChanged(Editable s) {
send.setEnabled(!s.toString().isEmpty());
int start = edit.getSelectionStart();
int end = edit.getSelectionEnd();
edit.removeTextChangedListener(this);
CharSequence cs = EmojiManager.parse(s.toString(), edit.getTextSize());
Toast.makeText(login.this,cs.toString(),Toast.LENGTH_SHORT).show();
edit.setText(cs, TextView.BufferType.SPANNABLE);
edit.setSelection(start, end);
edit.addTextChangedListener(this);
}
});
2:解析方法 判断每个字符的是否为表情然后做处理
public static CharSequence parse(String text, float textSize) {
if (text == null) {
return "";
}
//将字符串转换为数组
final char[] chars = text.toCharArray();
final SpannableStringBuilder ssb = new SpannableStringBuilder(text);

int codePoint;
boolean isSurrogatePair;
for (int i = 0; i < chars.length; i++) {
if (Character.isHighSurrogate(chars[i])) {
continue;
} else if (Character.isLowSurrogate(chars[i])) {
if (i > 0 && Character.isSurrogatePair(chars[i - 1], chars[i])) {
codePoint = Character.toCodePoint(chars[i - 1], chars[i]);
isSurrogatePair = true;
} else {
continue;
}
} else {
codePoint = (int) chars[i];
isSurrogatePair = false;
}

if (emojiCodeList.contains(codePoint)) {
Bitmap bitmap = BitmapFactory.decodeResource(gContext.getResources(), getResourceByCode(codePoint));
BitmapDrawable bmpDrawable = new BitmapDrawable(gContext.getResources(), bitmap);
bmpDrawable.setBounds(0, 0, (int) textSize, (int) textSize);
CenterImageSpan imageSpan = new CenterImageSpan(bmpDrawable);
ssb.setSpan(imageSpan, isSurrogatePair ? i - 1 : i, i + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return ssb;
}

private static class CenterImageSpan extends ImageSpan {

public CenterImageSpan(Drawable draw) {
super(draw);
}

@Override
public void draw(Canvas canvas, CharSequence text, int start, int end, float x,
int top, int y, int bottom, Paint paint) {
Drawable b = getDrawable();
Paint.FontMetricsInt fm = paint.getFontMetricsInt();
int transY = ((bottom - top) - getDrawable().getBounds().bottom) / 2 + top;
canvas.save();
canvas.translate(x, transY);
b.draw(canvas);
canvas.restore();
}
}

转载于:https://www.cnblogs.com/xiguameng/p/5857862.html

要在 NodeCanvas 中绘制带有 emoji 表情字符串,需要遵循以下步骤: 1. 安装 canvas 模块。在终端中输入以下命令: ``` npm install canvas ``` 2. 使用以下代码创建一个 Canvas 实例: ```javascript const { createCanvas } = require('canvas'); const canvas = createCanvas(800, 600); const ctx = canvas.getContext('2d'); ``` 3. 确定要使用的支持 emoji 的字体。在本例中,我们将使用 Noto Color Emoji 字体: ```javascript ctx.font = '40px Noto Color Emoji'; ``` 4. 使用以下代码将带有 emoji 表情字符串绘制到 Canvas 上: ```javascript const text = 'Hello, 😃!'; ctx.fillText(text, 50, 50); ``` 这将在 Canvas 上绘制出 "Hello, 😃!" 这个字符串,其中 😃 表示一个笑脸的 emoji 表情。 5. 最后,将 Canvas 保存为 PNG 或 JPEG 格式的图像。在本例中,我们将它保存为 PNG 格式: ```javascript const fs = require('fs'); const out = fs.createWriteStream(__dirname + '/output.png'); const stream = canvas.createPNGStream(); stream.pipe(out); out.on('finish', () => console.log('The PNG file was created.')); ``` 完整代码示例: ```javascript const { createCanvas } = require('canvas'); const canvas = createCanvas(800, 600); const ctx = canvas.getContext('2d'); ctx.font = '40px Noto Color Emoji'; const text = 'Hello, 😃!'; ctx.fillText(text, 50, 50); const fs = require('fs'); const out = fs.createWriteStream(__dirname + '/output.png'); const stream = canvas.createPNGStream(); stream.pipe(out); out.on('finish', () => console.log('The PNG file was created.')); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值