Skip to content

Commit 4f52446

Browse files
duom青源duom青源
authored andcommitted
feat: 安卓emoji图片地址从RN传入
1 parent 657304a commit 4f52446

File tree

6 files changed

+80
-20
lines changed

6 files changed

+80
-20
lines changed

android/src/main/java/com/variabletextinput/bean/RichTextBean.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ public class RichTextBean {
88
public String content;//传给RN提交的内容
99
public String text;//普通文本字符
1010
public int type;//0普通文本字符、1插入自定义表情、2插入@或者#话题
11-
11+
public String emojiUri;//RN传过来的emoji的URI
1212
}

android/src/main/java/com/variabletextinput/util/ActivityConst.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ public class ActivityConst {
88
public static final String TEXT = "text";
99
public static final String TYPE = "type";
1010
public static final String EMOJI_TAG = "emojiTag";
11+
public static final String EMOJI_URI = "emojiUri";
1112
}

android/src/main/java/com/variabletextinput/view/VariableTextInput.java

Lines changed: 64 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,16 @@
4747

4848
import androidx.core.content.ContextCompat;
4949

50+
import java.io.InputStream;
5051
import java.lang.reflect.Field;
52+
import java.net.HttpURLConnection;
53+
import java.net.URL;
5154

5255
public class VariableTextInput extends LinearLayout {
5356
private VariableEditText editText;
5457
private ScrollView scrollView;
5558
private Boolean ignoreNextLocalTextChange = false;
56-
59+
private Bitmap imgBitmap = null;
5760
private Context mContext;
5861
private SpannableString mSpannableString;
5962
private Editable mEditable;
@@ -478,22 +481,71 @@ private RichTextBean handleParams(ReadableMap map) {
478481
if (map.hasKey(ActivityConst.TEXT)) {
479482
richTextBean.text = map.getString(ActivityConst.TEXT);
480483
}
484+
if (map.hasKey(ActivityConst.EMOJI_URI)){
485+
richTextBean.emojiUri = map.getString(ActivityConst.EMOJI_URI);
486+
}
481487
return richTextBean;
482488
}
483-
489+
/**
490+
* 通过 网络图片 url 获取图片BitMap
491+
* @param photoUrl 网络图片 url
492+
*/
493+
private void requestWebPhotoBitMap(String photoUrl){
494+
new Thread(()->{
495+
HttpURLConnection connection = null;
496+
try {
497+
URL bitmapUrl = new URL(photoUrl);
498+
connection = (HttpURLConnection) bitmapUrl.openConnection();
499+
connection.setRequestMethod("GET");
500+
connection.setConnectTimeout(5000);
501+
connection.setReadTimeout(5000);
502+
// 判断是否请求成功
503+
if (connection.getResponseCode() == 200) {
504+
505+
InputStream inputStream = connection.getInputStream();
506+
imgBitmap = BitmapFactory.decodeStream(inputStream);
507+
508+
} else {
509+
//todo
510+
}
511+
}catch (Exception e){
512+
//todo
513+
}
514+
}).start();
515+
}
484516
public void insertEmoji(RichTextBean richTextBean) {
485517
int startIndex = editText.getSelectionStart();
486518
int endIndex = startIndex + richTextBean.tag.length();
487-
if (editText.getText() != null) {
488-
editText.getText().insert(startIndex, richTextBean.tag);
489-
}
490-
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.kuxiao);
491-
TextSpan imageSpan = new TextSpan(mContext, BitmapUtil.setBitmapSize(bitmap, editText.getTextSize()), richTextBean);
492-
mSpannableString = SpannableString.valueOf(editText.getText());
493-
mSpannableString.setSpan(imageSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
494-
editText.setText(mSpannableString);
495-
editText.setSelection(endIndex);
496-
editText.getText().replace(startIndex, endIndex, richTextBean.content);
519+
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.kuxiao);
520+
new Thread(()->{
521+
try {
522+
Bitmap iBitMap;
523+
if (richTextBean.emojiUri.startsWith("http")){
524+
String imgUrl = richTextBean.emojiUri;
525+
URL url = new URL(imgUrl);
526+
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
527+
connection.setDoInput(true);
528+
connection.connect();
529+
InputStream input = connection.getInputStream();
530+
iBitMap = BitmapFactory.decodeStream(input);
531+
}else {
532+
iBitMap = BitmapFactory.decodeFile(richTextBean.emojiUri);
533+
}
534+
if (editText.getText() != null) {
535+
editText.getText().insert(startIndex, richTextBean.tag);
536+
}
537+
TextSpan imageSpan = new TextSpan(mContext, BitmapUtil.setBitmapSize(iBitMap, editText.getTextSize()), richTextBean);
538+
mSpannableString = SpannableString.valueOf(editText.getText());
539+
mSpannableString.setSpan(imageSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
540+
editText.setText(mSpannableString);
541+
editText.setSelection(endIndex);
542+
editText.getText().replace(startIndex, endIndex, richTextBean.content);
543+
}catch (Exception e){
544+
//todo
545+
Log.d("错误", "insertEmoji: "+e);
546+
}
547+
}).start();
548+
497549
}
498550

499551
private void insertMentions(RichTextBean richTextBean) {

example/src/App.tsx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export const App = () => {
3636
img: data,
3737
emojiTag: '[苦笑]',
3838
type: ITextType.emoji,
39+
emojiUri: data.uri,
3940
});
4041
};
4142
const blur = () => {
@@ -54,7 +55,12 @@ export const App = () => {
5455
const imageData: ImageResolvedAssetSource = Image.resolveAssetSource(
5556
require('./[苦笑].png')
5657
);
57-
const emojiData = { img: imageData, emojiTag: '[苦笑]' };
58+
const emojiData: IInserTextAttachmentItem = {
59+
img: imageData,
60+
emojiTag: '[苦笑]',
61+
type: 1,
62+
emojiUri: imageData.uri,
63+
};
5864
const tagData: IInserTextAttachmentItem = {
5965
tag: '#',
6066
name: '测试tag',
@@ -64,18 +70,18 @@ export const App = () => {
6470
};
6571
inPutRef.current?.changeAttributedText([
6672
{ type: 0, text: '普通字符' },
67-
{ type: 1, ...emojiData },
73+
emojiData,
6874
tagData,
6975
{ type: 0, text: '普通字符' },
7076
tagData,
71-
{ type: 1, ...emojiData },
77+
emojiData,
7278
{ type: 0, text: '普通字符' },
7379
tagData,
7480
{ type: 0, text: '普通字符' },
7581
tagData,
76-
{ type: 1, ...emojiData },
77-
{ type: 1, ...emojiData },
78-
{ type: 1, ...emojiData },
82+
emojiData,
83+
emojiData,
84+
emojiData,
7985
]);
8086
};
8187
const focus = () => {

ios/VariableTextInput.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ -(void)cut:(id)sender{
483483
UIPasteboard *defaultPasteboard = [UIPasteboard generalPasteboard];
484484
[defaultPasteboard setString:content];
485485
// 标记视图需要重新布局
486-
[self setNeedsLayout];f
486+
[self setNeedsLayout];
487487
return;
488488
}
489489
// 标记视图需要重新布局

src/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export interface IInserTextAttachmentItem {
5454
id?: string;
5555
img?: ImageResolvedAssetSource; //emoji图片
5656
emojiTag?: string; //[微笑] //emojitag
57+
emojiUri?: string;
5758
}
5859
interface IProps {
5960
onMention?: () => void;

0 commit comments

Comments
 (0)