Java 类android.text.style.ImageSpan 实例源码
项目:maud
文件:SpanImageListener.java
boolean replace(ImageSpan by) {
int start = builder.getSpanStart(span);
int end = builder.getSpanEnd(span);
if (start == -1)
return true;
builder.removeSpan(span);
builder.setSpan(
by,
start,
end,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
);
target.setText(builder);
return true;
}
项目:cnBetaGeek
文件:MyTagHandler.java
@Override
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
// TODO Auto-generated method stub
// �����ǩ<img>
if (tag.toLowerCase().equals("img")) {
// ��ȡ����
int len = output.length();
// ��ȡͼƬ��ַ
ImageSpan[] images = output.getSpans(len-1, len, ImageSpan.class);
String imgURL = images[0].getSource();
// ʹͼƬ�ɵ������������¼�
output.setSpan(new ImageClick(context, imgURL), len-1, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
项目:GitHub
文件:XhsFilter.java
public static void emoticonDisplay(Context context, Spannable spannable, String emoticonName, int fontSize, int start, int end) {
Drawable drawable = getDrawableFromAssets(context, emoticonName);
if (drawable != null) {
int itemHeight;
int itemWidth;
if (fontSize == WRAP_DRAWABLE) {
itemHeight = drawable.getIntrinsicHeight();
itemWidth = drawable.getIntrinsicWidth();
} else {
itemHeight = fontSize;
itemWidth = fontSize;
}
drawable.setBounds(0, 0, itemHeight, itemWidth);
ImageSpan imageSpan = new ImageSpan(drawable);
spannable.setSpan(imageSpan, start, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
}
项目:airgram
文件:GroupCreateActivity.java
private ChipSpan createAndPutChipForUser(TLRPC.User user) {
LayoutInflater lf = (LayoutInflater) ApplicationLoader.applicationContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View textView = lf.inflate(R.layout.group_create_bubble, null);
TextView text = (TextView)textView.findViewById(R.id.bubble_text_view);
String name = UserObject.getUserName(user);
if (name.length() == 0 && user.phone != null && user.phone.length() != 0) {
name = PhoneFormat.getInstance().format("+" + user.phone);
}
text.setText(name + ", ");
int spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
textView.measure(spec, spec);
textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight());
Bitmap b = Bitmap.createBitmap(textView.getWidth(), textView.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(b);
canvas.translate(-textView.getScrollX(), -textView.getScrollY());
textView.draw(canvas);
textView.setDrawingCacheEnabled(true);
Bitmap cacheBmp = textView.getDrawingCache();
Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true);
textView.destroyDrawingCache();
final BitmapDrawable bmpDrawable = new BitmapDrawable(b);
bmpDrawable.setBounds(0, 0, b.getWidth(), b.getHeight());
SpannableStringBuilder ssb = new SpannableStringBuilder("");
ChipSpan span = new ChipSpan(bmpDrawable, ImageSpan.ALIGN_BASELINE);
allSpans.add(span);
selectedContacts.put(user.id, span);
for (ImageSpan sp : allSpans) {
ssb.append("<<");
ssb.setSpan(sp, ssb.length() - 2, ssb.length(), SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE);
}
userSelectEditText.setText(ssb);
userSelectEditText.setSelection(ssb.length());
return span;
}
项目:Hitalk
文件:TextSpanUtils.java
public static ImageSpan getTextWithBackground(Drawable background, final int textSize
, final int padding, final int color){
return new ImageSpan(background){
@Override
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
paint.setTextSize(textSize + padding);
int len = Math.round(paint.measureText(text, start, end));
getDrawable().setBounds(0, 0, len, (int) (1.5f * getTextMaxHeight(paint,textSize)));
Drawable b = getDrawable();
canvas.save();
int transY = ((bottom-top) - b.getBounds().bottom)/2+top;
canvas.translate(x , transY);
b.draw(canvas);
canvas.restore();
paint.setColor(color);
paint.setTextSize(textSize);
canvas.drawText(text.subSequence(start, end).toString(), x+ padding ,y, paint);
}
};
}
项目:HiBangClient
文件:EmoticonsTextView.java
private CharSequence replace(CharSequence text) {
try {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
Pattern pattern = buildPattern();
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
if (BaseApplication.mEmoticonsId.containsKey(matcher.group())) {
int id = BaseApplication.mEmoticonsId.get(matcher.group());
Bitmap bitmap = BitmapFactory.decodeResource(
getResources(), id);
if (bitmap != null) {
ImageSpan span = new ImageSpan(getContext(), bitmap);
builder.setSpan(span, matcher.start(), matcher.end(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
return builder;
} catch (Exception e) {
return text;
}
}
项目:HiBangClient
文件:EmoticonsEditText.java
private CharSequence replace(CharSequence text) {
try {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
Pattern pattern = buildPattern();
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
if (BaseApplication.mEmoticonsId.containsKey(matcher.group())) {
int id = BaseApplication.mEmoticonsId.get(matcher.group());
Bitmap bitmap = BitmapFactory.decodeResource(
getResources(), id);
if (bitmap != null) {
ImageSpan span = new ImageSpan(getContext(), bitmap);
builder.setSpan(span, matcher.start(), matcher.end(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
return builder;
} catch (Exception e) {
return text;
}
}
项目:SDHtmlTextView
文件:ImageHandler.java
@Override
public void handleTagNode(TagNode node, SpannableStringBuilder builder,
int start, int end, SpanStack stack) {
String src = node.getAttributeByName("src");
builder.append("\uFFFC");
Bitmap bitmap = loadBitmap(src);
if (bitmap != null) {
Drawable drawable = new BitmapDrawable(bitmap);
drawable.setBounds(0, 0, bitmap.getWidth() - 1,
bitmap.getHeight() - 1);
stack.pushSpan( new ImageSpan(drawable), start, builder.length() );
}
}
项目:FastTextView
文件:EllipseFragment.java
@NonNull
private SpannableStringBuilder getSpannable() {
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(getResources().getString(R.string.content_cn));
Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher);
drawable.setBounds(0, 0, 35, 35);
spannableStringBuilder.setSpan(new ImageSpan(drawable)
, 36, 37, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableStringBuilder.setSpan(new ImageSpan(drawable)
, 37, 38, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableStringBuilder.setSpan(new ImageSpan(drawable)
, 38, 39, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableStringBuilder.setSpan(new ImageSpan(drawable)
, 39, 40, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
// ItalicReplacementSpan italicSpan = new ItalicReplacementSpan(-0.25f);
// StrokeSpan strokeSpan = new StrokeSpan(Color.BLUE, Color.YELLOW, 20);
// spannableStringBuilder.setSpan(strokeSpan, 0, spannableStringBuilder.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
return spannableStringBuilder;
}
项目:WeChatDemo
文件:EmojiUtil.java
/** 显示文本和表情 */
public static void setText(TextView textView, String text) {
Context context = textView.getContext();
Resources resources = context.getResources();
SpannableString ss = new SpannableString(text);
// 正则表达式: [高兴]
Pattern p = Pattern.compile("\\[([A-Za-z\u4E00-\u9FA5]+)\\]");
Matcher matcher = p.matcher(ss);
while (matcher.find()) {
// 匹配到一个表情字符串
String emoji = matcher.group();
// 过滤非表情符,比如: [xxx]
if (EMOJI_DATAS.containsKey(emoji)) { // 是表情才处理
// System.out.println("----------" + emoji);
// 指定了一张图片
Bitmap bitmap = BitmapFactory.decodeResource(resources, EMOJI_DATAS.get(emoji));
bitmap = Global.createBitmap(bitmap, Global.dp2px(20)); // 图片的宽高为20dp
ImageSpan span = new ImageSpan(context, bitmap, ImageSpan.ALIGN_BOTTOM);
int start = matcher.start();
int end = matcher.end();
ss.setSpan(span, start, end, 0);
}
}
textView.setText(ss);
}
项目:WeChatDemo
文件:EmojiParser.java
public static SpannableStringBuilder parseEmoji(Context context,String content){
int size = UIUtils.dip2Px(25,context);
//里[smiley_00]ff[smiley_78]
SpannableStringBuilder builder = new SpannableStringBuilder(content);
//正则表达式
Pattern pattern = Pattern.compile("\\[smiley_(.*?)\\]");
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
String emo = matcher.group();//[smiley_00]
emo = emo.substring(1, emo.length()-1);
//获取表情的id
int id = context.getResources().getIdentifier(emo, "drawable", context.getPackageName());
if(id != 0 ){
Drawable drawable = context.getResources().getDrawable(id);
// 必须设置图片大小
drawable.setBounds(0, 0, size, size);
// 包装一下图片
ImageSpan span = new ImageSpan(drawable);
// 把文字替换成图片
builder.setSpan(span, matcher.start(), matcher.end(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return builder;
}
项目:PocketGopher
文件:UnknownPage.java
public void render(final TextView textView, final Context context, String line)
{
final Handler handler = new Handler(Looper.getMainLooper());
final SpannableString text = new SpannableString(" " + line + "\n");
handler.post(new Runnable()
{
@Override
public void run()
{
//set the image tag behind (left of) the text
text.setSpan(new ImageSpan(context, IMAGE_TAG), 0, 1, 0);
textView.append(text);
}
});
}
项目:boohee_v5.6
文件:MQEmotionUtil.java
public static SpannableString getEmotionText(Context context, String source, int
emotionSizeDp) {
SpannableString spannableString = new SpannableString(source);
Matcher matcher = Pattern.compile(REGEX_GROUP).matcher(spannableString);
if (matcher.find()) {
matcher.reset();
}
while (matcher.find()) {
String emojiStr = matcher.group(1);
if (emojiStr != null) {
ImageSpan imageSpan = getImageSpan(context, emojiStr, emotionSizeDp);
if (imageSpan != null) {
int start = matcher.start(1);
spannableString.setSpan(imageSpan, start, emojiStr.length() + start, 33);
}
}
}
return spannableString;
}
项目:HtmlCompat
文件:HtmlToSpannedConverter.java
private void startImg(Editable text, Attributes attributes, HtmlCompat.ImageGetter img) {
String src = attributes.getValue("", "src");
Drawable d = null;
if (img != null) {
d = img.getDrawable(src, attributes);
}
if (d == null) {
Resources res = mContext.getResources();
d = res.getDrawable(R.drawable.unknown_image);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
}
int len = text.length();
text.append("\uFFFC");
text.setSpan(new ImageSpan(d, src), len, text.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
项目:LiveGiftLayout
文件:ExpressionUtil.java
public SpannableStringBuilder getFace(Context mContext, String content) {
SpannableStringBuilder sb = new SpannableStringBuilder();
try {
/**
* 经过测试,虽然这里tempText被替换为png显示,但是但我单击发送按钮时,获取到輸入框的内容是tempText的值而不是png
* 所以这里对这个tempText值做特殊处理
* 格式:[face/png/f_static_000.png],以方便判斷當前圖片是哪一個
* */
String tempText = "[" + content + "]";
sb.append(tempText);
sb.setSpan(
new ImageSpan(mContext, BitmapFactory.decodeStream(mContext.getAssets().open(content))),
sb.length() - tempText.length(),
sb.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
} catch (Exception e) {
e.printStackTrace();
}
return sb;
}
项目:decoy
文件:ChatRoomMsgViewHolderBaseText.java
@Override
protected void bindContentView() {
layoutDirection();
TextView bodyTextView = findViewById(R.id.nim_message_item_text_body);
bodyTextView.setTextColor(isReceivedMessage() ? Color.BLACK : Color.WHITE);
bodyTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClick();
}
});
MoonUtil.identifyFaceExpression(NimUIKit.getContext(), bodyTextView, getDisplayText(), ImageSpan.ALIGN_BOTTOM);
bodyTextView.setMovementMethod(LinkMovementMethod.getInstance());
bodyTextView.setOnLongClickListener(longClickListener);
}
项目:decoy
文件:IncomingMsgPrompt.java
public void show(IMMessage newMessage) {
if (newMessageTipLayout == null) {
init();
}
if (!TextUtils.isEmpty(newMessage.getFromAccount())) {
newMessageTipHeadImageView.loadBuddyAvatar(newMessage.getFromAccount());
} else {
newMessageTipHeadImageView.resetImageView();
}
MoonUtil.identifyFaceExpression(context, newMessageTipTextView, TeamNotificationHelper.getMsgShowText(newMessage),
ImageSpan.ALIGN_BOTTOM);
newMessageTipLayout.setVisibility(View.VISIBLE);
uiHandler.removeCallbacks(showNewMessageTipLayoutRunnable);
uiHandler.postDelayed(showNewMessageTipLayoutRunnable, 5 * 1000);
}
项目:decoy
文件:MoonUtil.java
private static SpannableString replaceEmoticons(Context context, String value, float scale, int align) {
if(TextUtils.isEmpty(value)) {
value="";
}
SpannableString mSpannableString = new SpannableString(value);
Matcher matcher = EmojiManager.getPattern().matcher(value);
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
String emot = value.substring(start, end);
Drawable d = getEmotDrawable(context, emot, scale);
if (d != null) {
ImageSpan span = new ImageSpan(d, align);
mSpannableString.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return mSpannableString;
}
项目:decoy
文件:MoonUtil.java
public static void replaceEmoticons(Context context, Editable editable, int start, int count) {
if (count <= 0 || editable.length() < start + count)
return;
CharSequence s = editable.subSequence(start, start + count);
Matcher matcher = EmojiManager.getPattern().matcher(s);
while (matcher.find()) {
int from = start + matcher.start();
int to = start + matcher.end();
String emot = editable.subSequence(from, to).toString();
Drawable d = getEmotDrawable(context, emot, SMALL_SCALE);
if (d != null) {
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
editable.setSpan(span, from, to, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
项目:decoy
文件:AitHelper.java
public static ImageSpan getInputAitSpan(String name, float textsize) {
if (TextUtils.isEmpty(name)) {
return null;
}
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
paint.setTextSize(textsize);
Rect rect = new Rect();
paint.getTextBounds(name, 0, name.length(), rect);
// 获取字符串在屏幕上的长度
int width = (int) (paint.measureText(name));
final Bitmap bmp = Bitmap.createBitmap(width, rect.height(),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
canvas.drawText(name, rect.left, rect.height() - rect.bottom, paint);
return new ImageSpan(NimUIKit.getContext(), bmp, ImageSpan.ALIGN_BOTTOM);
}
项目:TurboChat
文件:EmojiParser.java
public void insert(SpannableString message) {
for (String emoji : emojiList) {
Matcher matcher = getEmojiParser(message.toString(), emoji);
Bitmap emojiBitmap = null;
while (matcher.find()) {
if (emojiBitmap == null) {
Resources resources = context.getResources();
int resourceId = resources.getIdentifier(String.format("%1s_%2s", emojiResourcePrefix, emoji), EMOJI_TYPE, context.getPackageName());
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId);
emojiBitmap = Bitmap.createScaledBitmap(bitmap, textSize, textSize, true);
bitmap.recycle();
}
ImageSpan span = new ImageSpan(context, emojiBitmap, ImageSpan.ALIGN_BASELINE);
message.setSpan(span, matcher.start(), matcher.end(), 0);
}
}
}
项目:AyoSunny
文件:HtmlTagHandler.java
private static void startImg(SpannableStringBuilder text,
Attributes attributes, Html.ImageGetter img) {
String src = attributes.getValue("", "src");
Drawable d = null;
if (img != null) {
d = img.getDrawable(src);
}
if (d == null) {
d = Resources.getSystem().
getDrawable(android.R.drawable.ic_delete);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
}
int len = text.length();
text.append("\uFFFC");
text.setSpan(new ImageSpan(d, src), len, text.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
项目:HX
文件:EmojiUtil.java
public static void handlerEmojiText(EditText comment, String content, Context context) throws IOException {
SpannableStringBuilder sb = new SpannableStringBuilder(content);
String regex = "\\[(\\S+?)\\]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(content);
Iterator<Emoji> iterator;
Emoji emoji = null;
while (m.find()) {
iterator = emojiList.iterator();
String tempText = m.group();
while (iterator.hasNext()) {
emoji = iterator.next();
if (tempText.equals(emoji.getContent())) {
//转换为Span并设置Span的大小
sb.setSpan(new ImageSpan(context, decodeSampledBitmapFromResource(context.getResources(), emoji.getImageUri()
, dip2px(context, 18), dip2px(context, 18))),
m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
break;
}
}
}
comment.setText(sb);
comment.setSelection(sb.length());
}
项目:HX
文件:EmojiUtil.java
public static void handlerEmojiText(TextView comment, String content, Context context) throws IOException {
SpannableStringBuilder sb = new SpannableStringBuilder(content);
String regex = "\\[(\\S+?)\\]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(content);
Iterator<Emoji> iterator;
Emoji emoji = null;
while (m.find()) {
iterator = emojiList.iterator();
String tempText = m.group();
while (iterator.hasNext()) {
emoji = iterator.next();
if (tempText.equals(emoji.getContent())) {
//转换为Span并设置Span的大小
sb.setSpan(new ImageSpan(context, decodeSampledBitmapFromResource(context.getResources(), emoji.getImageUri()
, dip2px(context, 50), dip2px(context, 50))),
m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
break;
}
}
}
comment.setText(sb);
}
项目:MyTravelingDiary
文件:EmojiUtils.java
/**
* 讲带emoji表情的字符串解析成带表情的文本
*
* @param text
* @return
*/
public static CharSequence fromStringToEmoji(CharSequence text, Context context) {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
Pattern mPattern = Pattern.compile(":(\\S+?):");
Matcher matcher = mPattern.matcher(text);
Integer resId = null;
while (matcher.find()) {
resId = EmojiTranslate.emojiSrcMap.get(matcher.group(0));
if (resId != null && resId > 0) {
Drawable drawable = context.getResources().getDrawable(resId);
int w = (int) (drawable.getIntrinsicWidth() * 0.32);
int h = (int) (drawable.getIntrinsicHeight() * 0.32);
drawable.setBounds(0, 0, w, h);//这里设置图片的大小
ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
builder.setSpan(imageSpan, matcher.start(),
matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return builder;
}
项目:MyTravelingDiary
文件:EmojiUtils.java
/**
* 讲带emoji表情的字符串解析成带表情的文本
*
* @param text
* @return
*/
public static CharSequence fromStringToEmoji1(CharSequence text, Context context) {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
Pattern mPattern = Pattern.compile(":(\\S+?):");
Matcher matcher = mPattern.matcher(text);
Integer resId = null;
while (matcher.find()) {
resId = EmojiTranslate.emojiSrcMap.get(matcher.group(0));
if (resId != null && resId > 0) {
Drawable drawable = context.getResources().getDrawable(resId);
int w = (int) (drawable.getIntrinsicWidth() * 0.38);
int h = (int) (drawable.getIntrinsicHeight() * 0.38);
drawable.setBounds(0, 0, w, h);//这里设置图片的大小
ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
builder.setSpan(imageSpan, matcher.start(),
matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return builder;
}
项目:MyTravelingDiary
文件:IncomingMsgPrompt.java
public void show(IMMessage newMessage) {
if (newMessageTipLayout == null) {
init();
}
if (!TextUtils.isEmpty(newMessage.getFromAccount())) {
newMessageTipHeadImageView.loadBuddyAvatar(newMessage.getFromAccount());
} else {
newMessageTipHeadImageView.resetImageView();
}
MoonUtil.identifyFaceExpression(context, newMessageTipTextView, TeamNotificationHelper.getMsgShowText(newMessage),
ImageSpan.ALIGN_BOTTOM);
newMessageTipLayout.setVisibility(View.VISIBLE);
uiHandler.removeCallbacks(showNewMessageTipLayoutRunnable);
uiHandler.postDelayed(showNewMessageTipLayoutRunnable, 5 * 1000);
}
项目:MyTravelingDiary
文件:MoonUtil.java
private static SpannableString replaceEmoticons(Context context, String value, float scale, int align) {
if(TextUtils.isEmpty(value)) {
value="";
}
SpannableString mSpannableString = new SpannableString(value);
Matcher matcher = EmojiManager.getPattern().matcher(value);
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
String emot = value.substring(start, end);
Drawable d = getEmotDrawable(context, emot, scale);
if (d != null) {
ImageSpan span = new ImageSpan(d, align);
mSpannableString.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return mSpannableString;
}
项目:MyTravelingDiary
文件:MoonUtil.java
public static void replaceEmoticons(Context context, Editable editable, int start, int count) {
if (count <= 0 || editable.length() < start + count)
return;
CharSequence s = editable.subSequence(start, start + count);
Matcher matcher = EmojiManager.getPattern().matcher(s);
while (matcher.find()) {
int from = start + matcher.start();
int to = start + matcher.end();
String emot = editable.subSequence(from, to).toString();
Drawable d = getEmotDrawable(context, emot, SMALL_SCALE);
if (d != null) {
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
editable.setSpan(span, from, to, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
项目:RxZhihuDaily
文件:MoonUtil.java
public static void replaceEmoticons(Context context, Editable editable, int start, int count) {
if (count <= 0 || editable.length() < start + count)
return;
CharSequence s = editable.subSequence(start, start + count);
Matcher matcher = EmoUtil.getPattern().matcher(s);
while (matcher.find()) {
int from = start + matcher.start();
int to = start + matcher.end();
String emot = editable.subSequence(from, to).toString();
Drawable d = getEmotDrawable(context, emot, DEF_SCALE);
if (d != null) {
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
editable.setSpan(span, from, to, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
项目:BiBi
文件:FaceTextUtils.java
/**
* toSpannableString
* @return SpannableString
* @throws
*/
public static SpannableString toSpannableString(Context context, String text) {
if (!TextUtils.isEmpty(text)) {
SpannableString spannableString = new SpannableString(text);
int start = 0;
Pattern pattern = Pattern.compile("\\\\ue[a-z0-9]{3}", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String faceText = matcher.group();
String key = faceText.substring(1);
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),
context.getResources().getIdentifier(key, "drawable", context.getPackageName()), options);
ImageSpan imageSpan = new ImageSpan(context, bitmap);
int startIndex = text.indexOf(faceText, start);
int endIndex = startIndex + faceText.length();
if (startIndex >= 0)
spannableString.setSpan(imageSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
start = (endIndex - 1);
}
return spannableString;
} else {
return new SpannableString("");
}
}
项目:BiBi
文件:FaceTextUtils.java
public static SpannableString toSpannableString(Context context, String text, SpannableString spannableString) {
int start = 0;
Pattern pattern = Pattern.compile("\\\\ue[a-z0-9]{3}", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String faceText = matcher.group();
String key = faceText.substring(1);
BitmapFactory.Options options = new BitmapFactory.Options();
// options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), context.getResources()
.getIdentifier(key, "drawable", context.getPackageName()), options);
ImageSpan imageSpan = new ImageSpan(context, bitmap);
int startIndex = text.indexOf(faceText, start);
int endIndex = startIndex + faceText.length();
if (startIndex >= 0)
spannableString.setSpan(imageSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
start = (endIndex - 1);
}
return spannableString;
}
项目:QQ
文件:EmoticonsTextView.java
private CharSequence replace(String text) {
try {
SpannableString spannableString = new SpannableString(text);
int start = 0;
Pattern pattern = buildPattern();
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String faceText = matcher.group();
String key = faceText.substring(1);
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(),
getContext().getResources().getIdentifier(key, "drawable", getContext().getPackageName()), options);
ImageSpan imageSpan = new ImageSpan(getContext(), bitmap);
int startIndex = text.indexOf(faceText, start);
int endIndex = startIndex + faceText.length();
if (startIndex >= 0)
spannableString.setSpan(imageSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
start = (endIndex - 1);
}
return spannableString;
} catch (Exception e) {
return text;
}
}
项目:ChipView
文件:ChipView.java
private int buildChip(String chip, SpannableStringBuilder builder, int index, int pos) {
chipBuilder.setPosition(pos);
View view = chipBuilder.getChip(inflater, chip);
int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
view.measure(spec, spec);
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
Bitmap bmp = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
canvas.translate(-view.getScrollX(), -view.getScrollY());
view.draw(canvas);
view.setDrawingCacheEnabled(true);
Bitmap cache = view.getDrawingCache();
Bitmap bitmap = cache.copy(Bitmap.Config.ARGB_8888, true);
view.destroyDrawingCache();
BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap);
drawable.setBounds(0, 0, view.getWidth(), view.getHeight());
builder.setSpan(new ImageSpan(drawable), index, index + chip.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(new ChipClickSpan(callback), index, index + chip.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return index + chip.length() + 1;
}
项目:ForPDA
文件:Html.java
private static void startImg(Editable text, Attributes attributes, Html.ImageGetter img) {
String src = attributes.getValue("", "src");
Drawable d = null;
if (img != null) {
d = img.getDrawable(src);
}
if (d == null) {
//TODO kakayato tam drawabla hz zachem
/*d = Resources.getSystem().
getDrawable(R.drawable.adf);*/
d = App.getContext().getResources().getDrawable(R.drawable.adf);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
}
int len = text.length();
text.append("\uFFFC");
text.setSpan(new ImageSpan(d, src), len, text.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
项目:yun2win-sdk-android
文件:IncomingMsgPrompt.java
public void show(MessageModel newMessage) {
if (newMessageTipLayout == null) {
init();
}
if (!TextUtils.isEmpty(newMessage.getEntity().getSender())) {
newMessageTipHeadImageView.loadBuddyAvatarbyuid(newMessage.getEntity().getSender(), R.drawable.circle_image_transparent);
} else {
newMessageTipHeadImageView.resetImageView();
}
MoonUtil.identifyFaceExpression(context, newMessageTipTextView, newMessage.getEntity().getContent(),
ImageSpan.ALIGN_BOTTOM);
newMessageTipLayout.setVisibility(View.VISIBLE);
uiHandler.removeCallbacks(showNewMessageTipLayoutRunnable);
uiHandler.postDelayed(showNewMessageTipLayoutRunnable, 5 * 1000);
}
项目:yun2win-sdk-android
文件:MoonUtil.java
private static SpannableString replaceEmoticons(Context context, String value, float scale, int align) {
if(TextUtils.isEmpty(value)) {
value="";
}
SpannableString mSpannableString = new SpannableString(value);
Matcher matcher = EmojiManager.getPattern().matcher(value);
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
String emot = value.substring(start, end);
Drawable d = getEmotDrawable(context, emot, scale);
if (d != null) {
ImageSpan span = new ImageSpan(d, align);
mSpannableString.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return mSpannableString;
}
项目:yun2win-sdk-android
文件:MoonUtil.java
public static void replaceEmoticons(Context context, Editable editable, int start, int count) {
if (count <= 0 || editable.length() < start + count)
return;
CharSequence s = editable.subSequence(start, start + count);
Matcher matcher = EmojiManager.getPattern().matcher(s);
while (matcher.find()) {
int from = start + matcher.start();
int to = start + matcher.end();
String emot = editable.subSequence(from, to).toString();
Drawable d = getEmotDrawable(context, emot, SMALL_SCALE);
if (d != null) {
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
editable.setSpan(span, from, to, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
项目:monolog-android
文件:EaseSmileUtils.java
/**
* replace existing spannable with smiles
* @param context
* @param spannable
* @return
*/
public static boolean addSmiles(Context context, Spannable spannable) {
boolean hasChanges = false;
for (Entry<Pattern, Integer> entry : emoticons.entrySet()) {
Matcher matcher = entry.getKey().matcher(spannable);
while (matcher.find()) {
boolean set = true;
for (ImageSpan span : spannable.getSpans(matcher.start(),
matcher.end(), ImageSpan.class))
if (spannable.getSpanStart(span) >= matcher.start()
&& spannable.getSpanEnd(span) <= matcher.end())
spannable.removeSpan(span);
else {
set = false;
break;
}
if (set) {
hasChanges = true;
spannable.setSpan(new ImageSpan(context, entry.getValue()),
matcher.start(), matcher.end(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
return hasChanges;
}
项目:youkes_vr
文件:ExpressionUtil.java
public static SpannableStringBuilder parse(Context mContext, String content, int itemWidth, int itemHeight) {
SpannableStringBuilder sb = new SpannableStringBuilder(content);
String regex = "\\[[^\\]]+\\]";//[图片]
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(content);
while (m.find()) {
String tempText = m.group();
if (tempText.equals("[图片]")) {
continue;
}
String png = tempText.substring("[".length(), tempText.length() - "]".length());
try {
ImageSpan ispan = new ImageSpan(mContext, BitmapFactory.decodeStream(mContext.getAssets().open(png)));
ispan.getDrawable().setBounds(0, 0, itemWidth, itemHeight);
sb.setSpan(ispan, m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
} catch (IOException e1) {
e1.printStackTrace();
}
}
return sb;
}