图库相机换头像
全部代码
//xml代码
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context=".fragment.BlankFragment3">
<!-- TODO: Update blank fragment layout -->
<ImageView
android:id="@+id/image"
android:src="@mipmap/ic_launcher"
android:layout_width="100dp"
android:layout_height="100dp"></ImageView>
<Button
android:id="@+id/store"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="图库"></Button>
<Button
android:id="@+id/camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="相机"></Button>
</LinearLayout>
//java代码
package com.example.zuoyegaode.fragment;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.FileProvider;
import androidx.fragment.app.Fragment;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.example.zuoyegaode.R;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* A simple {@link Fragment} subclass.
*/
public class BlankFragment3 extends Fragment {
private ImageView image;
private Button camera;
private Button store;
private String path = "";
public BlankFragment3() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View inflate = inflater.inflate(R.layout.fragment_blank_fragment3, container, false);
image = (ImageView) inflate.findViewById(R.id.image);
camera = (Button) inflate.findViewById(R.id.camera);
store = (Button) inflate.findViewById(R.id.store);
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
requestPermissions(new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE
,Manifest.permission.CAMERA
},101);
}
camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
path = "/sdcard/DCIM/Camera/"+time();
//使用fileprovider保存照片
Uri uri = FileProvider.getUriForFile(getActivity(), "com.example.zuoyegaode", new File(path));
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
startActivityForResult(intent,102);
}
});
store.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent,103);
}
});
return inflate;
}
public String time(){
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyMMdd_HHmmss");
String format = simpleDateFormat.format(date);
return "IMG"+format+".jpg";
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==102&&resultCode== Activity.RESULT_OK){
Glide.with(this).load(path).transform(new CenterCrop(),new CircleCrop()).into(image);
}else if (requestCode==103&&resultCode== Activity.RESULT_OK){
Uri data1 = data.getData();
Glide.with(this).load(data1).transform(new CenterCrop(),new CircleCrop()).into(image);
}
}
}
清单文件添加
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.yohojava"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths" />
</provider>
paths文件
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="mypath"
path="DCIM"></external-path>
</paths>