需要上传图片的地方的都会有图片选择这项功能,Android当然也可以实现,下面我主要说下最普通寻常的功能,从相册选择图片或拍照,并将图片显示出来。由于这个小功能代码简单,直接贴代码,大家参考下吧。

这次又是无图无真相,不过代码可以直接run起来、

public class PhotoChooser extends Activity {    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //以下是界面布局,没有在xml界面中,直接new出来了        LinearLayout allLayout = new LinearLayout(this);        allLayout.setOrientation(LinearLayout.VERTICAL);        LinearLayout buttonLine = new LinearLayout(this);        Button choose1 = new Button(this);        Button choose2 = new Button(this);        choose1.setText("相册选取");        choose2.setText("拍照选取");        choose1.setOnClickListener(new View.OnClickListener() {            //打开相册选取            @Override            public void onClick(View v) {                Intent it = new Intent();                it.setType("image/*");                it.setAction(Intent.ACTION_GET_CONTENT);                startActivityForResult(it, 2);            }        });        choose2.setOnClickListener(new View.OnClickListener() {            //打开照相机拍照选取            @Override            public void onClick(View v) {                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);                startActivityForResult(intent, 1);            }        });        buttonLine.addView(choose1);        buttonLine.addView(choose2);        imageView = new ImageView(this);        imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);        allLayout.addView(buttonLine);        allLayout.addView(imageView);        setContentView(allLayout);        scale = getResources().getDisplayMetrics().density;    }    ImageView imageView;    float scale;    //这个方法我只知道是为了适应不同屏幕的显示,具体还真不理解,先用着吧    public int getPixel(int old) {        return (int) (old * scale + 0.5f);    }    //由于Intent使用的是 startActivityForResult,调用此回调方法接受返回数据,即照片。    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        if (data != null) {            Uri mImageCaptureUri = data.getData();            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(getPixel(300), getPixel(250));            params.setMargins(0, 15, 0, 15);            if (mImageCaptureUri != null) {                try {                    //这个方法是根据Uri获取Bitmap图片的静态方法                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), mImageCaptureUri);                    // 获取屏幕分辨率                    DisplayMetrics dm_2 = new DisplayMetrics();                    getWindowManager().getDefaultDisplay().getMetrics(dm_2);                    // 图片分辨率与屏幕分辨率比例                    float scale_2 = bitmap.getWidth() / (float) dm_2.widthPixels;                    Bitmap newBitMap = null;                    if (scale_2 > 1) {                        newBitMap = zoomBitmap(bitmap, bitmap.getWidth()                                / scale_2, bitmap.getHeight() / scale_2);                        bitmap.recycle();                    }                    if (newBitMap != null) {                        imageView.setImageBitmap(newBitMap);                    } else {                        imageView.setImageBitmap(bitmap);                    }                    imageView.setLayoutParams(params);                } catch (Exception e) {                    e.printStackTrace();                }            } else {                Bundle extras = data.getExtras();                if (extras != null) {                    //这里是有些拍照后的图片是直接存放到Bundle中的所以我们可以从这里面获取Bitmap图片                    Bitmap image = extras.getParcelable("data");                    if (image != null) {                        imageView.setImageBitmap(image);                        imageView.setLayoutParams(params);                    }                }            }        }    }    // 对分辨率较大的图片进行缩放    public Bitmap zoomBitmap(Bitmap bitmap, float width, float height) {        int w = bitmap.getWidth();        int h = bitmap.getHeight();        Matrix matrix = new Matrix();        float scaleWidth = ((float) width / w);        float scaleHeight = ((float) height / h);        matrix.postScale(scaleWidth, scaleHeight);// 利用矩阵进行缩放不会造成内存溢出        Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);        return newbmp;    }}




更多相关文章

  1. android中显示网络图片
  2. [置顶] Android(安卓)Touch事件的分发过程
  3. Android常用控件以及用法
  4. Android(安卓)IntentService的使用与源码解析
  5. Android开发--调试--模拟器--加快模拟器速度
  6. [置顶] android 优化那些事之图片缓存设计/如何高效的展示图片(
  7. 19、从头学Android之Android的数据存储--SharedPreferences
  8. Android(安卓)进阶 教你打造 Android(安卓)中的 IOC 框架 【View
  9. Android中Calendar类的用法总结

随机推荐

  1. Python list 交集,并集,差集
  2. Python 卡方检验、克雷姆值
  3. 运用Python语言编写获取Linux基本系统信
  4. 从0开始的Python学习019更多的Python内容
  5. gsutil - 正则表达式与替代不工作
  6. 第五十九节,模拟浏览器请求Python结合html
  7. LBP特征学习(附python实现)
  8. Python处理字符串
  9. 在管理页面中编辑M2M的两面
  10. 5月28日 python学习总结 CSS学习(二)