• 相冊选取,相冊裁剪


    activity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:id="@+id/btn_from_album_data"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="相冊选取——返回值"/>
    
        <Button
            android:id="@+id/btn_from_album_uri"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="相冊选择——PATH(终极)"/>
    
        <Button
            android:id="@+id/btn_from_album_path_crop"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="从相冊并截取——PATH(终极)"/>
    
        <ImageView
            android:id="@+id/image_result"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:scaleType="fitXY"/>
    
    </LinearLayout>

    MainActivity

    package com.harvic.blogalbumcropfinally;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.content.ContentUris;
    import android.content.Context;
    import android.content.Intent;
    import android.database.Cursor;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Matrix;
    import android.net.Uri;
    import android.os.Build;
    import android.os.Bundle;
    import android.os.Environment;
    import android.provider.DocumentsContract;
    import android.provider.MediaStore;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class MainActivity extends Activity implements View.OnClickListener {
    	// 相冊选取,返回直接得到图片就可以
    	private static final int RESULT_ALBUM_ONLY_THROUGH_DATA = 200;
    	private static final int RESULT_ALBUM_ONLY_THROUGH_URI = 201;
    	private static final int RESULT_ALBUM_CROP_URI = 301;
    	private static final int RESULT_ALBUM_CROP_PATH = 302;
    	private static final int RESULT_CAMERA_CROP_PATH_RESULT = 401;
    	private Uri imageUri;
    	private ImageView mImageView;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		String path = getSDCardPath();
    		File file = new File(path + "/temp.jpg");
    		// 获取存放截图的路径信息
    		imageUri = Uri.fromFile(file);
    
    		Button btn_from_camera_crop = (Button) findViewById(R.id.btn_from_album_uri);
    		Button btn_from_pic = (Button) findViewById(R.id.btn_from_album_data);
    		Button btn_from_pic_path_crop = (Button) findViewById(R.id.btn_from_album_path_crop);
    		mImageView = (ImageView) findViewById(R.id.image_result);
    
    		btn_from_camera_crop.setOnClickListener(this);
    		btn_from_pic.setOnClickListener(this);
    		btn_from_pic_path_crop.setOnClickListener(this);
    	}
    
    	@Override
    	public void onClick(View view) {
    		int id = view.getId();
    		switch (id) {
    		// 通过intent.setData()来返回数据
    		case R.id.btn_from_album_data:
    			takeAlbumOnlyThroughData();
    			break;
    		// 通过找到图片的路径,生成相应的URI来显示图片
    		case R.id.btn_from_album_uri:
    			takeAlbumThroughURI();
    			break;
    		// 通过找到图片的路径,指定裁剪
    		case R.id.btn_from_album_path_crop:
    			takeAlbumCropPath();
    			break;
    		default:
    			break;
    		}
    	}
    
    	/**
    	 * 通过相冊选取。直接返回得到相冊图片就可以
    	 */
    	private void takeAlbumOnlyThroughData() {
    		// 启动相冊的ACTION为ACTION_GET_CONTENT
    		Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
    		intent.setType("image/*");
    		startActivityForResult(intent, RESULT_ALBUM_ONLY_THROUGH_DATA);
    	}
    
    	/**
    	 * 通过找到图片的路径,生成相应的URI来显示图片
    	 */
    	private void takeAlbumThroughURI() {
    		Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
    		intent.setType("image/*");
    		startActivityForResult(intent, RESULT_ALBUM_ONLY_THROUGH_URI);
    	}
    
    	/**
    	 * 从相冊并截取——PATH(终极)
    	 */
    	private void takeAlbumCropPath() {
    		Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
    		intent.setType("image/*");
    		startActivityForResult(intent, RESULT_ALBUM_CROP_PATH);
    	}
    
    	public void cropImg(Uri uri) {
    		File tempFile = getTempFile();
    		Intent intent = new Intent("com.android.camera.action.CROP");
    		intent.setDataAndType(uri, "image/*");
    		intent.putExtra("crop", "true");
    		intent.putExtra("aspectX", 1);
    		intent.putExtra("aspectY", 1);
    		intent.putExtra("outputX", 700);
    		intent.putExtra("outputY", 700);
    		intent.putExtra("return-data", false);
    		intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
    		intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    		intent.putExtra("noFaceDetection", true);
    		startActivityForResult(intent, RESULT_CAMERA_CROP_PATH_RESULT);
    	}
    
    	@Override
    	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    		super.onActivityResult(requestCode, resultCode, data);
    		if (resultCode != Activity.RESULT_OK) {
    			return;
    		}
    		switch (requestCode) {
    		/**
    		 * 相冊选取,直接返回就可以
    		 * 这里没有将return-data设为false,也就是使用了默认值。即直接使用Intent中的data域来传递结果值
    		 */
    		case RESULT_ALBUM_ONLY_THROUGH_DATA: {
    			// 照片的原始资源地址
    			try {
    				// 能够从一个已知的图片Uri中获得图片的bitmap对象---
    				Bitmap photo = MediaStore.Images.Media.getBitmap(
    						getContentResolver(), data.getData());
    				if (photo != null) {
    					// 压缩处理
    					Bitmap smallBmp = setScaleBitmap(photo, 2);
    					mImageView.setImageBitmap(smallBmp);
    				}
    			} catch (FileNotFoundException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    			break;
    		/**
    		 * 通过找到图片的路径。生成相应的URI来显示图片
    		 */
    		case RESULT_ALBUM_ONLY_THROUGH_URI: {
    			try {
    				// 使用ContentProvider通过URI获取原始图片
    				String picPath = parsePicturePath(MainActivity.this,
    						data.getData());
    				File file = new File(picPath);
    				// 获取相机图片的Uri地址信息
    				Uri uri = Uri.fromFile(file);
    				// 获取图片
    				Bitmap photo = MediaStore.Images.Media.getBitmap(
    						getContentResolver(), uri);
    				if (photo !=
    
  • 相关阅读:
    170516、ActiveMQ 的安装与使用(单节点)
    170515、mybatis批量操作
    170512、java日志文件log4j.properties配置详解
    170511、Spring IOC和AOP 原理彻底搞懂
    170510、数据库默认隔离级别
    170509、文本编辑器编写的shell脚本在linux下无法执行的解决方法
    170508、忘记jenkins密码或者修改jenkins密码
    170505、MySQL的or/in/union与索引优化
    170504、MongoDB和MySQL对比(译)
    Jenkins Android 打包
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6906096.html
Copyright © 2020-2023  润新知