android开发EditText中添加图片

接上一次记事本项目,实现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("([^<]*)");
        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("", 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 =  ""+array1[j]+"";
                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 = ""+convertUriToStringPath(uri.toString())+"";
            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中添加图片_第1张图片




你可能感兴趣的:(Android)