头像选择

//初始化一个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;
    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值