团队博客-第二阶段冲刺-Day10

Aurora-RenShuoyang / 2023-05-28 / 原文

今天将安卓端的功能基本实现:

效果展示:

今天涉及的代码:

package com.transform.transformMine.fragment.other;

import static android.app.Activity.RESULT_OK;
import static com.xuexiang.xui.XUI.getContext;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.transform.transformMine.R;
import com.transform.transformMine.core.BaseFragment;
import com.transform.transformMine.databinding.FragmentTransBinding;
import com.xuexiang.xpage.annotation.Page;
import com.xuexiang.xpage.enums.CoreAnim;
import com.xuexiang.xui.widget.imageview.crop.CropImageView;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;

@Page(anim = CoreAnim.none)
public class TransFragment extends BaseFragment<FragmentTransBinding> implements View.OnClickListener {

    CropImageView cropImageView ;
    public static final int REQUEST_CODE_PICK_IMAGE = 1;

    @NonNull
    @Override
    protected FragmentTransBinding viewBindingInflate(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, boolean attachToRoot) {
        return FragmentTransBinding.inflate(inflater, container, attachToRoot);
    }

    @Override
    protected void initViews() {
        cropImageView = findViewById(R.id.crop_image_view);
    }

    @Override
    protected void initListeners() {
        binding.btnUpload.setOnClickListener(this);
    }

    @SuppressLint("IntentReset")
    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.btn_upload){
//            // 创建Intent对象
//            @SuppressLint("IntentReset") Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
//            // 设置要选择的文件类型
//            intent.setType("image/*");
//            // 开启选择器
//            startActivityForResult(Intent.createChooser(intent, "选择图片"), REQUEST_CODE_PICK_IMAGE);

            Intent intent = new Intent(Intent.ACTION_PICK, null);
            intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");

            startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);
        }
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case REQUEST_CODE_PICK_IMAGE:
                if (resultCode == RESULT_OK) {       //
                    if (data != null) {
                        // 得到图片的全路径
                        Uri uri = data.getData();
                        Bitmap bitmap1 = null;
                        try {
                            Bitmap bitmap = BitmapFactory.decodeStream(getContext().getContentResolver().openInputStream(uri));
                            bitmap1 = compressByJpeg(bitmap,50);
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        }
                        cropImageView.setImageBitmap(bitmap1);
                        String imagePath = uri.getPath();
                        // 调用目标方法进行处理
                        processImage(imagePath);
                    }
                }
                break;
        }
    }
    //压缩图片的代码,quality是压缩的百分比,填1-100代表1%到100%
    private Bitmap compressByJpeg(Bitmap bitmap, int quality) {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
        byte[] byteArray = outputStream.toByteArray();
        return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
    }
    
}