android 自定义比例裁剪图片(拍照 相册)方式

先说下我这个有啥好处 主要是能够自定义设置裁剪图片的比例.比如 :今天产品 给你说裁剪 成16:9 的图片. 你做好了 OK 明天 产品又和你说 裁剪成10:7 的图片 ,你是不是要吐血, 我这里只要设置一行代码就可以改变裁剪的比例.

OK 还是老规矩 先上效果图 看看啥样子

这里写图片描述

现在上传的还打上水印了 以前还没有呢. 感觉CSDN博客总会挂啊 上次我半天没打开 后来 问技术支持 说是阿里云哪里挂了 正在重启…

好了 不扯其他的了 我这里的比例是10: 7 的 ,来看下我的目录结构把

这里写图片描述

讲下大致原理 照相或者相册返回图片的地址 这个就不说了 得到地址.

创建一个自定义RelativeLayout ClipImageLayout 这个是裁剪视图 .里面有两个自定义view

1. ClipImageBorderView 绘制阴影截图视图 这个主要绘制了阴影还有边框 这个是界面

2.ClipZoomImageView 裁剪的缩放视图. 这个是实际裁剪的 实际裁剪在这里裁剪 创建bitmap 宽度是确定的 就是屏幕宽度

高度就是 屏幕高度减去 裁剪边框距离屏幕的高度除以2 代码里面有体现 注释.

1 我还集成了从相册选取和照相选取图片的地址 PhotoUtil 看代码把

使用方法自定义比例

这里写图片描述

贴一下主界面的代码

package com.example.clipphoto;

import java.io.File;
import java.io.IOException;

import com.example.clipphoto.util.BitmapUtils;
import com.example.clipphoto.util.LogUtils;
import com.example.clipphoto.util.PhotoUtil;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
/**
 * 主界面
 * @author liuml
 *
 */
public class MainActivity extends Activity {
	private PhotoUtil photoUtil;
	private ImageView iv_bg;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		iv_bg = (ImageView) findViewById(R.id.iv_bg);

	}


	public void show(View view) {
		photoUtil = new PhotoUtil(MainActivity.this);
		photoUtil.showDialog();
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);

		// 相册返回
		if (PhotoUtil.CAMRA_SETRESULT_CODE == requestCode) {
			if (resultCode == RESULT_OK) {
				// 相册选中图片路径
				String cameraPath = photoUtil.getCameraPath(data);
				Bitmap bitmap = photoUtil.readBitmapAutoSize(cameraPath);
				iv_bg.setImageBitmap(bitmap);
				String str = photoUtil.bitmaptoString(bitmap);
				LogUtils.d("相相册选中路径  = " + cameraPath);
				startClipActivity(cameraPath);
			}
		}
		// 相机返回
		else if (PhotoUtil.PHOTO_SETRESULT_CODE == requestCode) {
			if (resultCode == RESULT_OK) {
				String photoPath = photoUtil.getPhotoPath();
				Bitmap bitmap = photoUtil.readBitmapAutoSize(photoPath);
				String str = photoUtil.bitmaptoString(bitmap);
				iv_bg.setImageBitmap(bitmap);
				LogUtils.d("相机选中路径  = " + photoPath);
				startClipActivity(photoPath);

			}
		}
		// 裁剪返回
		else if (PhotoUtil.PHOTO_CORPRESULT_CODE == requestCode) {
			if (resultCode == RESULT_OK) {
				LogUtils.d("裁剪返回  = ");
				String path = data.getStringExtra("path");
				BitmapUtils bitmapUtils = new BitmapUtils(getApplicationContext());
		    	Bitmap bitmap = bitmapUtils.decodeFile(path);
		    	iv_bg.setImageBitmap(bitmap);
			}
		}

	}

	public void startClipActivity(String path) {

		Intent intent = new Intent(this, PhotoClipActivity.class);
		intent.putExtra("path", path);
		startActivityForResult(intent, PhotoUtil.PHOTO_CORPRESULT_CODE);
	}
}

好了 发demo 了 我感觉写一些小demo 还是用eclipse方便一些. 主要eclipse 可以放很多个项目 …

这是我的demo快去下载把

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值