實現在edittext中任意插入圖片

MyEditText:

public class MyEditText extends EditText {

    public MyEditText(Context context) {

        super(context);

    }

    public MyEditText(Context context, AttributeSet attrs) {

        super(context, attrs);

    }

    public void insertDrawable(int id) {

        final SpannableString ss = new SpannableString("easy");

        //得到drawable對象,即所有插入的圖片

        Drawable d = getResources().getDrawable(id);

        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());

        //用這個drawable對象代替字符串easy

        ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);

        //包括0但是不包括"easy".length()即:4。[0,4)

        ss.setSpan(span, 0, "easy".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

        append(ss);

    }

}


MyActivity:

public class MyActivity extends Activity {

    /** Called when the activity is first created. */

    Button b;

    MyEditText e;

    private static final int PHOTO_SUCCESS = 1;

    private static final int CAMERA_SUCCESS = 2;


    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.shangczp);

        b = (Button) findViewById(R.id.myButton);

        e = (MyEditText) findViewById(R.id.myEdit);

        b.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                final CharSequence[] items = { "手機相冊", "相機拍攝" };

                AlertDialog dlg = new AlertDialog.Builder(MyActivity.this).setTitle("選擇圖片").setItems(items,

                        new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog,int item) {

                                //這裏item是根據選擇的方式,

                                //在items數組裏面定義了兩種方式, 拍照的下標爲1所以就調用拍照方法

                                if(item==1){

                                    Intent getImageByCamera= new Intent("android.media.action.IMAGE_CAPTURE");

                                    startActivityForResult(getImageByCamera, CAMERA_SUCCESS);

                                }else{

                                    Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);

                                    getImage.addCategory(Intent.CATEGORY_OPENABLE);

                                    getImage.setType("p_w_picpath/*");

                                    startActivityForResult(getImage, PHOTO_SUCCESS);

                                }

                            }

                        }).create();

                dlg.show();

//                e.insertDrawable(R.drawable.easy);

            }

        });

    }







    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

        ContentResolver resolver = getContentResolver();

        if (resultCode == RESULT_OK) {

            switch (requestCode) {

                case PHOTO_SUCCESS:

                    //獲得圖片的uri

                    Uri originalUri = intent.getData();

                    Bitmap bitmap = null;

                    try {

                        Bitmap originalBitmap = BitmapFactory.decodeStream(resolver.openInputStream(originalUri));

                        bitmap = resizeImage(originalBitmap, 200, 200);

                    } catch (FileNotFoundException e) {

                        e.printStackTrace();

                    }

                    if(bitmap != null){

                        //根據Bitmap對象創建ImageSpan對象

                        ImageSpan p_w_picpathSpan = new ImageSpan(MyActivity.this, bitmap);

                        //創建一個SpannableString對象,以便插入用ImageSpan對象封裝的圖像

                        SpannableString spannableString = new SpannableString("[local]"+1+"[/local]");

                        //  用ImageSpan對象替換face

                        spannableString.setSpan(p_w_picpathSpan, 0, "[local]1[local]".length()+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

                        //將選擇的圖片追加到EditText中光標所在位置

                        int index = e.getSelectionStart(); //獲取光標所在位置

                        Editable edit_text = e.getEditableText();

                        if(index<0 index="">= edit_text.length()){

                            edit_text.append(spannableString);

                        }else{

                            edit_text.insert(index, spannableString);

                        }

                    }else{

                        Toast.makeText(MyActivity.this, "獲取圖片失敗", Toast.LENGTH_SHORT).show();

                    }

                    break;

                case CAMERA_SUCCESS:

                    Bundle extras = intent.getExtras();

                    Bitmap originalBitmap1 = (Bitmap) extras.get("data");

                    if(originalBitmap1 != null){

                        bitmap = resizeImage(originalBitmap1, 200, 200);

                        //根據Bitmap對象創建ImageSpan對象

                        ImageSpan p_w_picpathSpan = new ImageSpan(MyActivity.this, bitmap);

                        //創建一個SpannableString對象,以便插入用ImageSpan對象封裝的圖像

                        SpannableString spannableString = new SpannableString("[local]"+1+"[/local]");

                        //  用ImageSpan對象替換face

                        spannableString.setSpan(p_w_picpathSpan, 0, "[local]1[local]".length()+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

                        //將選擇的圖片追加到EditText中光標所在位置

                        int index = e.getSelectionStart(); //獲取光標所在位置

                        Editable edit_text = e.getEditableText();

                        if(index<0 index="">= edit_text.length()){

                            edit_text.append(spannableString);

                        }else{

                            edit_text.insert(index, spannableString);

                        }

                    }else{

                        Toast.makeText(MyActivity.this, "獲取圖片失敗", Toast.LENGTH_SHORT).show();

                    }

                    break;

                default:

                    break;

            }

        }

    }

    /**

     * 圖片縮放

     * @param originalBitmap 原始的Bitmap

     * @param newWidth 自定義寬度

     * @return 縮放後的Bitmap

     */

    private Bitmap resizeImage(Bitmap originalBitmap, int newWidth, int newHeight){

        int width = originalBitmap.getWidth();

        int height = originalBitmap.getHeight();

        //定義欲轉換成的寬、高

//            int newWidth = 200;

//            int newHeight = 200;

        //計算寬、高縮放率

        float scanleWidth = (float)newWidth/width;

        float scanleHeight = (float)newHeight/height;

        //創建操作圖片用的matrix對象 Matrix

        Matrix matrix = new Matrix();

        // 縮放圖片動作

        matrix.postScale(scanleWidth,scanleHeight);

        //旋轉圖片 動作

        //matrix.postRotate(45);

        // 創建新的圖片Bitmap

        Bitmap resizedBitmap = Bitmap.createBitmap(originalBitmap,0,0,width,height,matrix,true);

        return resizedBitmap;

    }


}

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >


   .example.edittext_pic.myedittext<>

        android:id="@+id/myEdit"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" />


   <>

        android:id="@+id/myButton"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="插入圖片" />




原文地址:http://www.cnblogs.com/to-creat/p/5186168.html


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