调用相机和相册进行裁剪上传头像

最近呢,做了一个简单的上传头像,用dialog弹出框,进行选择是相机还是相册

不知道怎么说,先写布局吧,也可以说是相当简单,但是为了怕有人不会,或者是看不懂,我在这里一部到位

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView 
        android:text="头像"
        android:textSize="20sp"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        />
	<ImageView 
	    android:id="@+id/img_view"
	    android:layout_width="300dp"
	    android:layout_height="300dp"
	    android:layout_gravity="center"
	    android:src="@drawable/ic_launcher"
	    />
</LinearLayout>

因为,我写在Fragment里面了,不要问我为什么,不写在Activity里面,因为我懒,不想改。。。。

public class MyFragment extends Fragment implements OnClickListener {

	private ImageView img_view;
	private AlertDialog alertDialog;
	private Button btn_xiangce;
	private Button btn_pai;
	private String path = Environment.getExternalStorageDirectory() + "/head.jpg";

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view = inflater.inflate(R.layout.my_fragment, null, false);
		img_view = (ImageView) view.findViewById(R.id.img_view);
		return view;
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onActivityCreated(savedInstanceState);
		img_view.setOnClickListener(this);
	}

	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.img_view:
			createDialog();
			break;
		case R.id.btn_pai:
			Intent PIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
			PIntent.putExtra(MediaStore.EXTRA_OUTPUT,
					Uri.fromFile(new File(path)));
			startActivityForResult(PIntent, 100);
			alertDialog.dismiss();
			break;
		case R.id.btn_xiangce:
			Intent XIntent = new Intent(Intent.ACTION_PICK);
			XIntent.setType("image/*");
			startActivityForResult(XIntent, 99);
			alertDialog.dismiss();
			break;
		default:
			break;
		}
	}

	private void createDialog() {
		// TODO Auto-generated method stub
		Builder builder = new AlertDialog.Builder(getActivity());
		alertDialog = builder.create();
		alertDialog.setTitle("请选择");
		View dialogView = View.inflate(getActivity(), R.layout.btn_layout,
				null);
		alertDialog.setView(dialogView);
		btn_xiangce = (Button) dialogView.findViewById(R.id.btn_xiangce);
		btn_pai = (Button) dialogView.findViewById(R.id.btn_pai);
		btn_xiangce.setOnClickListener(this);
		btn_pai.setOnClickListener(this);
		alertDialog.show();
	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (requestCode == 99 && resultCode == getActivity().RESULT_OK) {
			// 裁剪
			crop(data.getData());
		}
		if (requestCode == 89 && resultCode == getActivity().RESULT_OK) {
			img_view.setImageBitmap((Bitmap) data.getParcelableExtra("data"));
		}
		if (requestCode == 100 && resultCode == getActivity().RESULT_OK) {
			crop(Uri.fromFile(new File(path)));
		}
	}

	private void crop(Uri data) {
		// TODO Auto-generated method stub
		Intent cIntent = new Intent("com.android.camera.action.CROP");
		cIntent.setDataAndType(data, "image/*");
		cIntent.putExtra("crop", "true");
		cIntent.putExtra("aspectX", 1);
		cIntent.putExtra("aspectY", 1);
		cIntent.putExtra("outputX", 249);
		cIntent.putExtra("outputY", 249);
		cIntent.putExtra("return-data", true);
		startActivityForResult(cIntent, 89);
	}
}

在这里声明一下,Dialog导包问题,因为Android studio的导包没有Eclipse好,为了避免有人,导错包....

import android.app.AlertDialog;
import android.app.AlertDialog.Builder;

最后一个是Dialog个的布局,我在这里一部到位了

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn_pai"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="拍照" />

    <Button
        android:id="@+id/btn_xiangce"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="上传本地" />

</LinearLayout>

权限声明,别忘了,否则拿不到本地图片

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值