項目中需要這個效果:
就和人人網@用戶的效果一樣,一直沒有思路,不知道怎樣去完成這個功能。
後來想到一個想法就是使用Spannable完成,設置文字的背景色來達到這個效果,但刪除不能刪除整個用戶名,會一個字一個字的刪除。
後來偶然想到了使用ImageSpan來完成這個功能,就相當於在EditText中插入圖片,要實現這個主要有兩個問題:
1、字符串轉換爲圖片。
2、EditText插入圖片。
代碼如下:
/**
* 獲取圖片並插入EditText
*/
private void insertEditText(String str){
Bitmap imgBitmap = Str2Bit.createBitmap(str);
if(imgBitmap != null){
//根據Bitmap對象創建ImageSpan對象
ImageSpan imageSpan = new ImageSpan(MainActivity.this, imgBitmap);
//創建一個SpannableString對象,以便插入用ImageSpan對象封裝的圖像
SpannableString spannableString = new SpannableString("[name]"+str+"[/name]");
// 用ImageSpan對象替換face
spannableString.setSpan(imageSpan, 0, ("[name]"+str+"[/name]").length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//將選擇的圖片追加到EditText中光標所在位置
int index = editText.getSelectionStart(); //獲取光標所在位置
Editable edit_text = editText.getEditableText();
if(index <0 || index >= edit_text.length()){
edit_text.append(spannableString);
}else{
edit_text.insert(edit_text.length(), spannableString);
}
}else{
Log.i("MainActivity", "插入失敗");
}
}
/**
* 字符串轉換成圖片
* @param str
* @return
*/
public static Bitmap createBitmap(String str) {
Bitmap bp = Bitmap.createBitmap(60, 30, Config.ARGB_8888); //畫布大小
Canvas c = new Canvas(bp);
Paint paint1 = new Paint();
paint1.setColor(Color.BLACK);
c.drawColor(Color.BLUE);//畫布顏色
Paint paint2 = new Paint();//畫姓名前邊的間隔
paint2.setColor(Color.WHITE);
paint2.setStrokeWidth(1f);
c.drawLine(0, 0, 0, 30, paint2);
Paint paint = new Paint();
paint.setTextSize(20);//字體大小
paint.setColor(Color.BLACK);//字體大小
paint.setFakeBoldText(true); //粗體
paint.setTextSkewX(0);//斜度
paint.setTextAlign(Paint.Align.CENTER);
c.drawText(str, 30, 20, paint);//文字位置
c.save( Canvas.ALL_SAVE_FLAG );//保存
c.restore();//
return bp;
}
具體效果自己改吧。
下載地址:http://pan.baidu.com/share/link?shareid=154636802&uk=1745678343