仿QQ头像从相册选择相片或从照相机拍摄,并缩放。

xml布局文件

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >


    <ImageView 
        android:id="@+id/Head_portrait"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="false"
        android:maxHeight="40dp"
        android:maxWidth="40dp"
        android:scaleType="center"
        android:background="#f00"
        android:src="@drawable/alan"
        />


</RelativeLayout>


.java文件

package com.wlay.myimageview;


import java.io.File;


import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;


public class MainActivity extends Activity {
private ImageView imageView1;
private String pathImage; 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView1=(ImageView)findViewById(R.id.Head_portrait);
        imageView1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
ShowPickDialog();
}
});
    }
   
    private void ShowPickDialog() {
new AlertDialog.Builder(this)
.setTitle("设置头像")
.setNegativeButton("相册", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Intent intent = new Intent(Intent.ACTION_PICK,null);
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
startActivityForResult(intent, 1);
}
})
.setPositiveButton("拍照", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();

Intent intent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
.fromFile(new File(Environment
.getExternalStorageDirectory(),
"alan.jpg")));
startActivityForResult(intent, 2);
}
}).show();
}
    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   
switch (requestCode) {
// 如果是直接从相册获取
case 1:
if(resultCode==RESULT_OK && requestCode==1) {        
           Uri uri = data.getData();  
           if (!TextUtils.isEmpty(uri.getAuthority())) {  
               //查询选择图片  
               Cursor cursor = getContentResolver().query(  
                       uri,  
                       new String[] { MediaStore.Images.Media.DATA },  
                       null,   
                       null,   
                       null);  
               //返回 没找到选择图片  
               if (null == cursor) {  
                   return;  
               }  
               //光标移动至开头 获取图片路径  
               cursor.moveToFirst();  
               pathImage = cursor.getString(cursor  
                       .getColumnIndex(MediaStore.Images.Media.DATA));  
           }
           startPhotoCut(data.getData());
       }  //end if 打开图片
 
break;
// 如果是调用相机拍照时
case 2:
File temp = new File(Environment.getExternalStorageDirectory()
+ "/alan.jpg");
startPhotoCut(Uri.fromFile(temp));
break;
// 取得裁剪后的图片
case 3:

if(data != null){
setPicToView(data);
}
break;
default:
break;


}
super.onActivityResult(requestCode, resultCode, data);
}
    public void startPhotoCut(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
//下面这个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);
}
   
    private void setPicToView(Intent picdata) {
Bundle extras = picdata.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");


}
}}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值