温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

拍照剪切and获取sd卡中的图片

发布时间:2020-07-25 00:47:59 来源:网络 阅读:350 作者:android紫函 栏目:移动开发

package com.truekey.alarmclock.user;

import java.io.File;

import android.app.Activity;

import android.app.Dialog;

import android.content.Context;

import android.content.Intent;

import android.content.SharedPreferences;

import android.graphics.Bitmap;

import android.graphics.drawable.BitmapDrawable;

import android.graphics.drawable.Drawable;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.provider.MediaStore;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.Window;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.RelativeLayout.LayoutParams;

import android.widget.TextView;

import com.truekey.alarmclock.R;


public class UserInfoActivity extends Activity {

ImageView user_header_p_w_picpath;

Dialog pictureDialog;

View pictureView;

Button takePictureBtn, allPicture, cancle;

private static final int SCALE = 15;// 照片缩小比例

String imgBase64;

String fileName = null;

ImageView iv_title_left, iv_title_right;


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.user_info_layout);

iv_title_right = (ImageView) findViewById(R.id.iv_title_right);

iv_title_left = (ImageView) findViewById(R.id.iv_title_left);

user_header_p_w_picpath = (ImageView) findViewById(R.id.user_header_p_w_picpath);

TextView nicheng_tv = (TextView) findViewById(R.id.nicheng_tv);

pictureDialog();

}


public void onClick(View v) {

switch (v.getId()) {

case R.id.user_header_p_w_picpath:

pictureDialog.show();

pictureDialog.getWindow().setLayout(LayoutParams.MATCH_PARENT,

LayoutParams.WRAP_CONTENT);

break;

case R.id.iv_title_right:

finish();

overridePendingTransition(R.anim.home_main_last_twoactivity_out,

R.anim.ptr_slide_out_to_bottom);

break;

case R.id.iv_title_left:

finish();

overridePendingTransition(R.anim.home_main_last_twoactivity_in,

R.anim.ptr_slide_out_to_bottom);

default:

break;

}

}

// 拍照布局

public void pictureDialog() {

pictureView = LayoutInflater.from(UserInfoActivity.this).inflate(

R.layout.takepicture_dialog, null);

cancle = (Button) pictureView.findViewById(R.id.cancle);

takePictureBtn = (Button) pictureView.findViewById(R.id.take_picture);

takePictureBtn.setOnClickListener(new ButtonOnClickListener());

// 所有的图片选取。。

allPicture = (Button) pictureView.findViewById(R.id.all_picture);

// 所有图片

allPicture.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(Intent.ACTION_PICK, null);

intent.setDataAndType(

MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "p_w_picpath/*");

startActivityForResult(intent, 1);

}

});


// 取消

cancle.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

pictureDialog.dismiss();

}

});

if (pictureView != null) {

/* 自定义对话框 */

pictureDialog = new Dialog(this, R.style.mydialog);

pictureDialog.setContentView(pictureView);

pictureDialog.setCancelable(false);

Window window = pictureDialog.getWindow();

window.setWindowAnimations(R.style.AlterDialogAnima);

window.setGravity(Gravity.BOTTOM);

}

}

public final static int CAMERA_RESULT = 8888;

// 拍照获取图片

private class ButtonOnClickListener implements View.OnClickListener {

@Override

public void onClick(View v) {

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

// 下面这句指定调用相机拍照后的照片存储的路径

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(

Environment.getExternalStorageDirectory(), "xiaoma.jpg")));

startActivityForResult(intent, 2);

}

}

@Override

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

super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK) {

switch (requestCode) {

case 1:

startPhotoZoom(data.getData());

break;

// 如果是调用相机拍照时

case 2:

File temp = new File(Environment.getExternalStorageDirectory()

+ "/xiaoma.jpg");

startPhotoZoom(Uri.fromFile(temp));

break;

// 取得裁剪后的图片

case 3:

/**

* 非空判断大家一定要验证,如果不验证的话, 在剪裁之后如果发现不满意,要重新裁剪,丢弃

* 当前功能时,会报NullException,小马只 在这个地方加下,大家可以根据不同情况在合适的 地方做判断处理类似情况

*

*/

if (data != null) {

setPicToView(data);

}

break;

default:

break;

}

}

}

/**

* 裁剪图片方法实现

*

* @param uri

*/

public void startPhotoZoom(Uri uri) {

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(uri, "p_w_picpath/*");

// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪

intent.putExtra("crop", "true");

// aspectX aspectY 是宽高的比例

intent.putExtra("aspectX", 1);

intent.putExtra("aspectY", 1);

// outputX outputY 是裁剪图片宽高

intent.putExtra("outputX", 150);

intent.putExtra("outputY", 150);

intent.putExtra("return-data", true);

startActivityForResult(intent, 3);

}

/**

* 保存裁剪之后的图片数据

*

* @param picdata

*/

private void setPicToView(Intent picdata) {

Bundle extras = picdata.getExtras();

if (extras != null) {

Bitmap photo = extras.getParcelable("data");

Drawable drawable = new BitmapDrawable(photo);

pictureDialog.dismiss();

// 为防止原始图片过大导致内存溢出,这里先缩小原图显示,然后释放原始Bitmap占用的内存

Bitmap choosepicture = ImageTools.toRoundBitmap2(photo);

// 释放原始图片占用的内存,防止out of memory异常发生

photo.recycle();

user_header_p_w_picpath.setImageBitmap(choosepicture);

}

}


// 用于保存图片

public void putSharedpreference(String takepicture) {

SharedPreferences shared = getSharedPreferences("temp",

Context.MODE_PRIVATE);

SharedPreferences.Editor edit = shared.edit();

edit.putString("picture", takepicture);

edit.commit();

}


public String getSharedpreference() {

SharedPreferences shared = getSharedPreferences("temp",

Context.MODE_PRIVATE);

return shared.getString("picture", "");

}


@Override

protected void onDestroy() {

super.onDestroy();

putSharedpreference(fileName);

}


@Override

protected void onResume() {

super.onResume();


}

}


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI