/**
* 将图片路径映射到Bitmap,再通过SpannableString 和 ImageSpan显示到EditText*/
private voidsetImageView() {//如果EditText中已经有相同资源的ImageSpan,则不再读取图片
ImageSpan imageSpan =getImageSpanFromExistence(imagePath);if (imageSpan != null) {
insertIntoEditor(imageSpan, imagePath);return;
}if (imagePath != null && (!imagePath.equals("null"))&& (!"".equals(imagePath))) {
insertIntoEditor(imagePath);/** 不再用缓存模式*/}
}/**
* 从当前的EditText获取ImageSpan,如果存在则返回否则返回Null
*
* @return*/
privateImageSpan getImageSpanFromExistence(String source) {
Editable edit=contentText.getText();
ImageSpan[] spans= edit.getSpans(0, edit.length(), ImageSpan.class);for(ImageSpan ip : spans) {int start =edit.getSpanStart(ip);int end =edit.getSpanEnd(ip);
String path=edit.toString().substring(start, end);
path= path.substring(5, path.length() - 5);if(source.equals(path)) {
Logg.D("find existed ImageSpan");return newImageSpan(ip.getDrawable(), ImageSpan.ALIGN_BASELINE);
}
}return null;
}/**
* 向光标位置插入ImageSpan,针对EditText已经有ImageSpan的情况
*
* @param ip
* ImageSpan
* @param path
* 路径*/
private voidinsertIntoEditor(ImageSpan span, String path) {if(("").length()+contentText.getText().length() >MAX_CONTENT){
Toast.makeText(getApplicationContext(), R.string.toast_reached_max_text, 2000).show();return;
}
SpannableString ss= new SpannableString("");if (span == null)throw new NullPointerException("span cant be null");
ss.setSpan(span,0, ("").length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Editable et= contentText.getText();//先获取Edittext中的内容
int start =contentText.getSelectionStart();
et.insert(start, ss);//设置ss要添加的位置
contentText.setSelection(start + ss.length());//设置Edittext中光标在最后面显示
Logg.D("insertIntoEditor by using existed ImageSpan");
}/**
* 向光标位置插入ImageSpan,针对EditText没有图片的情况
*
* @param path
* 图片路径*/
private voidinsertIntoEditor(String path) {if(("").length()+contentText.getText().length() >MAX_CONTENT){
Toast.makeText(getApplicationContext(), R.string.toast_reached_max_text, 2000).show();return;
}
SpannableString ss= new SpannableString("");//不再用缓存模式//Bitmap bm = mEditorHelper.getImage(path);
Bitmap bm =PictureHelper.getImageFromPath(imagePath,
screenWidth* 0.7F, screenWidth * 0.7F, false, 100,
Editor.this, imgPadding, false);if (bm == null) {throw new NullPointerException("bm cant be null");
}
ImageSpan span= new ImageSpan(this, bm, ImageSpan.ALIGN_BASELINE);
ss.setSpan(span,0, ("").length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Editable et= contentText.getText();//先获取Edittext中的内容
int start =contentText.getSelectionStart();
et.insert(start, ss);//插入图片到光标处//contentText.setSelection(start + ss.length());//设置Edittext中光标在最后面显示
Logg.D("insertIntoEditor by loading new");
}