android中EditText插入用户名(块)效果(EditText插入图片)

来源:互联网 发布:eview触摸屏软件 编辑:程序博客网 时间:2024/06/06 01:13
 

android中EditText插入用户名(块)效果(EditText插入图片)

分类: android常见问题 730人阅读 评论(1) 收藏 举报
EditText

项目中需要这个效果:

就和人人网@用户的效果一样,一直没有思路,不知道怎样去完成这个功能。

后来想到一个想法就是使用Spannable完成,设置文字的背景色来达到这个效果,但删除不能删除整个用户名,会一个字一个字的删除。

后来偶然想到了使用ImageSpan来完成这个功能,就相当于在EditText中插入图片,要实现这个主要有两个问题:

1、字符串转换为图片。

2、EditText插入图片。

代码如下:

[java] view plaincopy
  1. /** 
  2.  * 获取图片并插入EditText 
  3.  */  
  4. private void insertEditText(String str){  
  5.     Bitmap imgBitmap = Str2Bit.createBitmap(str);  
  6.     if(imgBitmap != null){  
  7.           
  8.         //根据Bitmap对象创建ImageSpan对象  
  9.         ImageSpan imageSpan = new ImageSpan(MainActivity.this, imgBitmap);  
  10.         //创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像  
  11.         SpannableString spannableString = new SpannableString("[name]"+str+"[/name]");  
  12.         //  用ImageSpan对象替换face  
  13.         spannableString.setSpan(imageSpan, 0, ("[name]"+str+"[/name]").length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  14.         //将选择的图片追加到EditText中光标所在位置  
  15.         int index = editText.getSelectionStart(); //获取光标所在位置  
  16.         Editable edit_text = editText.getEditableText();  
  17.         if(index <0 || index >= edit_text.length()){  
  18.             edit_text.append(spannableString);  
  19.         }else{  
  20.             edit_text.insert(edit_text.length(), spannableString);  
  21.         }  
  22.     }else{  
  23.         Log.i("MainActivity""插入失败");  
  24.     }  
  25. }  
[java] view plaincopy
  1. /** 
  2.  * 字符串转换成图片 
  3.  * @param str 
  4.  * @return 
  5.  */  
  6. public static Bitmap createBitmap(String str) {       
  7.     Bitmap bp = Bitmap.createBitmap(6030, Config.ARGB_8888); //画布大小  
  8.     Canvas c = new Canvas(bp);  
  9.     Paint paint1 = new Paint();  
  10.     paint1.setColor(Color.BLACK);  
  11.     c.drawColor(Color.BLUE);//画布颜色  
  12.       
  13.     Paint paint2 = new Paint();//画姓名前边的间隔  
  14.     paint2.setColor(Color.WHITE);   
  15.     paint2.setStrokeWidth(1f);  
  16.     c.drawLine(00030, paint2);  
  17.       
  18.     Paint paint = new Paint();  
  19.     paint.setTextSize(20);//字体大小  
  20.     paint.setColor(Color.BLACK);//字体大小  
  21.     paint.setFakeBoldText(true); //粗体  
  22.     paint.setTextSkewX(0);//斜度  
  23.     paint.setTextAlign(Paint.Align.CENTER);  
  24.     c.drawText(str, 3020, paint);//文字位置  
  25.     c.save( Canvas.ALL_SAVE_FLAG );//保存    
  26.     c.restore();//  
  27.     return bp;  
  28. }  
0 0
原创粉丝点击