//初始化一个popupWindow
//Android 8.0需要使用,否则相机调用不出来
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2) @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_mine, container, false); initpopup(); permission(); //8.0调用相机使用 StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build()); builder.detectFileUriExposure(); sp = getActivity().getSharedPreferences("regist", Context.MODE_PRIVATE); boolean isTrue = sp.getBoolean("isTrue", true); //第二次进入从sp获取图片 if (isTrue){ String string = sp.getString("string", null); Bitmap bitmap = stringToBitmap(string); //Glide4.3,加载圆形图片 Glide.with(this).load(bitmap).apply(RequestOptions.bitmapTransform(new CircleCrop())).into(imgMine); } return view; }
private void initpopup() { View view = LayoutInflater.from(this).inflate(R.layout.popu, null); // quxiao = view.findViewById(R.id.quxiao); popup = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); camera = (view).findViewById(R.id.camera); album = (view).findViewById(R.id.album); camera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent1.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg"))); startActivityForResult(intent1, PHOTOHRAPH); } }); album.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED); startActivityForResult(intent, PHOTOZOOM); } }); popup.setOutsideTouchable(true); popup.setBackgroundDrawable(new ColorDrawable(Color.GRAY)); }
//布局写的有点丑,别介意哈
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:textSize="20sp"
android:textColor="#000"
android:id="@+id/camera"
android:text="拍照"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:background="@color/gray"
/>
<TextView
android:textSize="20sp"
android:textColor="#000"
android:gravity="center_horizontal"
android:id="@+id/album"
android:text="从相册选取"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content" />
</LinearLayout>
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 10 && resultCode == 10) {
String username = data.getStringExtra("username");
textName.setText(username);
}
if (requestCode == 10 && resultCode == 1) {
String username = data.getStringExtra("style");
styleText.setText(username);
}
if (resultCode == NONE)
return;
// 拍照
if (requestCode == PHOTOHRAPH) {
//设置文件保存路径这里放在跟目录下
File picture = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");
startPhotoZoom(Uri.fromFile(picture));
}
if (data == null)
return;
// 读取相册缩放图片
if (requestCode == PHOTOZOOM) {
startPhotoZoom(data.getData());
}
// 处理结果
if (requestCode == PHOTORESOULT) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.PNG, 75, stream);
// (0 - 100)压缩文件
Log.d("PersonalMessageActivity", "photo:" + photo);
Glide.with(this).load(photo).apply(RequestOptions.bitmapTransform(new CircleCrop())).into(img);
s1 = bitmapToString(photo);
// if (photo!=null){
// EventBus.getDefault().postSticky(new MessageEvent(photo));
//
// }
// Glide.with(this).load(photo).apply(RequestOptions.bitmapTransform(new CircleCrop())).into(MyFragment.user_icon);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 100);
intent.putExtra("outputY", 100);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTORESOULT);
//动态授权
private void permission() {
if (Build.VERSION.SDK_INT >= 23) {
String[] mPermissionList = new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CALL_PHONE,
Manifest.permission.READ_LOGS,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.SET_DEBUG_APP,
Manifest.permission.SYSTEM_ALERT_WINDOW,
Manifest.permission.GET_ACCOUNTS, Manifest.permission.WRITE_APN_SETTINGS,Manifest.permission.CAMERA};
ActivityCompat.requestPermissions(getActivity(), mPermissionList, 123);
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
}
//给图片加水印
private Bitmap createWatermark(Bitmap bitmap, String mark) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
Paint p = new Paint();
// 水印颜色
p.setColor(Color.parseColor("#000000"));
// 水印字体大小
p.setTextSize(20);
//抗锯齿
p.setAntiAlias(true);
//绘制图像
canvas.drawBitmap(bitmap, 0, 0, p);
//绘制文字
canvas.drawText(mark, 0, h / 2, p);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
return bmp;
}
//将Bitmap转换成字符串
public String bitmapToString(Bitmap bitmap){
String string=null;
ByteArrayOutputStream bStream=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG,75,bStream);
byte[]bytes=bStream.toByteArray();
string=Base64.encodeToString(bytes,Base64.DEFAULT);
return string;
}
// 将字符串转换成Bitmap类型
public Bitmap stringToBitmap(String string) {
Bitmap bitmap = null;
try {
byte[] bitmapArray;
bitmapArray = Base64.decode(string, Base64.DEFAULT);
bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0,
bitmapArray.length);
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}