android中EditText插入用戶名(塊)效果(EditText插入圖片)

項目中需要這個效果:

就和人人網@用戶的效果一樣,一直沒有思路,不知道怎樣去完成這個功能。

後來想到一個想法就是使用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章