接上一次记事本项目,实现EditText中插入图片,引用android提供的imagespan和lSpannableString类用字符串替代图片插入到EditText内容后面
package com.wp.editor;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;
import android.util.AttributeSet;import android.widget.EditText;
public class editor extends EditText {
public editor(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public editor(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public void insertDrawable(Bitmap b,String imagepath) {
final SpannableString s = new SpannableString(imagepath);
//得到drawable对象,即所要插入的图片
Drawable d = new BitmapDrawable(b);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
//用这个drawable对象代替字符串imagepath
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
//包括0但是不包括magepath.length()即:imagepath.length()。[0,magepath.length())。值得注意的是当我们复制这个图片的时候,实际是复制了imagepath这个字符串。
s.setSpan(span, 0, imagepath.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
append(s);
}
}
从文件中读取并且使用正则表达式解析路径,实现ImageView的显示方法如下:
private void parseTextContent(String content) {
Pattern p = Pattern.compile("<image>([^<]*)</image>");
Matcher m = p.matcher(content);
int i = 0;
int tempIndex = 0;
String result;
String array1[] = new String[10];
String array2[] = new String[10];
while (m.find()) {
String temp = m.group(1);
// String temp2 = convert(temp);
array1[i] = temp;
int index = content.indexOf("<image>", tempIndex);
result = content.substring(tempIndex, index);
array2[i] = result;
i++;
tempIndex = index + 15 + temp.length();
}
int j = 0;
if (array1[j] != null) {
while (array2[j] != null) {
Bitmap b = BitmapFactory.decodeFile(array1[j]);
e.append(array2[j]);
String temp = "<image>"+array1[j]+"</image>";
e.insertDrawable(b, temp);
j++;
}
e.append(content.substring(tempIndex));//e为显示的EditText组建
}else{
e.setText(content);
}
}
下面是获取手机本地图片和标识图片路径的方法:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
String strPath;
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
ContentResolver cr = this.getContentResolver();
strPath = "<image>"+convertUriToStringPath(uri.toString())+"</image>";
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
res = bitmap;
e.insertDrawable(res,strPath);
}
super.onActivityResult(requestCode, resultCode, data);
}
private String convertUriToStringPath(String imgUri){
Uri uri = Uri.parse(imgUri);
String[] proj = { MediaStore.Images.Media.DATA };
Cursor c = this.managedQuery(uri,proj,null,null,null);
int index = c.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
c.moveToFirst();
String img_path = c.getString(index);
return img_path;
}
插入效果图如下:
本文介绍了如何在Android应用中实现在EditText中插入图片。通过使用ImageSpan和SpannableString,从文件中读取图片路径,并使用正则表达式解析,将图片显示在EditText内容中。同时展示了获取手机本地图片并插入的方法。
1053

被折叠的 条评论
为什么被折叠?



