zoukankan      html  css  js  c++  java
  • android选择本地图片并裁剪

    本文使用Android原生的选择和裁剪功能。下面是代码:

    public class PickAndCropActivity extends AppCompatActivity implements View.OnClickListener
    {
        public static final int REQUEST_CODE_PICK_IMG = 1;
        public static final int REQUEST_CODE_CROP_IMG = 2;
        /**
         * ImageView展示选择的图片和裁剪得到的图片
         */
        private ImageView img;
        /**
         * 选择得到的图片uri
         */
        private Uri mUri;
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_pick_and_crop);
            img = (ImageView) findViewById(R.id.img);
        }
    
        @Override
        public void onClick(View v)
        {
            switch (v.getId())
            {
                case R.id.pick:
                    startActivityForResult(IntentUtils.generatePickImgIntent(), REQUEST_CODE_PICK_IMG);
                    break;
                case R.id.crop:
                    startActivityForResult(IntentUtils.generateCropImgIntent(mUri, 150), REQUEST_CODE_CROP_IMG);
                    break;
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data)
        {
            switch (requestCode)
            {
                case REQUEST_CODE_PICK_IMG:
                    if (resultCode != RESULT_OK || data == null) break;
                    mUri = data.getData();
                    ContentResolver cr = this.getContentResolver();
                    try
                    {
                        Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(mUri));
                        img.setImageBitmap(bitmap);
                    } catch (FileNotFoundException e)
                    {
                        e.printStackTrace();
                    }
                    break;
                case REQUEST_CODE_CROP_IMG:
                    if (resultCode != RESULT_OK || data == null) break;
                    Bitmap bmap = data.getParcelableExtra("data");
                    img.setImageBitmap(bmap);
                    break;
            }
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
    

     中间用到的IntentUtils类:

    public class IntentUtils
    {
        /**
         * 构造一个选择图片的Intent
         *
         * @return
         */
        public static Intent generatePickImgIntent()
        {
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            return intent;
        }
    
        /**
         * 构造一个裁剪图片的Intent
         *
         * @param uri
         * @param size
         * @return
         */
        public static Intent generateCropImgIntent(Uri uri, int size)
        {
            Intent intent = new Intent("com.android.camera.action.CROP");
            // mUri是已经选择的图片Uri
            intent.setDataAndType(uri, "image/*");
            intent.putExtra("crop", "true");
            // 裁剪框比例
            intent.putExtra("aspectX", 1);
            intent.putExtra("aspectY", 1);
            // 输出图片大小
            intent.putExtra("outputX", size);
            intent.putExtra("outputY", size);
            intent.putExtra("return-data", true);
            return intent;
        }
    }
    
  • 相关阅读:
    组织过程资产
    事业环境因素
    一起来学习Android自定义控件2-简单的写字板控件
    Android自定义控件1
    一起来学习Android自定义控件1
    Java你可能不知道的事(3)HashMap
    Java你可能不知道的事(3)HashMap
    Java你可能不知道的事(3)HashMap
    java你可能不知道的事(2)--堆和栈
    java你可能不知道的事(2)--堆和栈
  • 原文地址:https://www.cnblogs.com/hsji/p/5116797.html
Copyright © 2011-2022 走看看