优秀的编程知识分享平台

网站首页 > 技术文章 正文

安卓takephotolibrary:4.1.0使用实例演示

nanyue 2024-09-12 15:50:36 技术文章 6 ℃

1.gradle文件

implementation 'com.github.bumptech.glide:glide:3.8.0'
api 'org.devio.takephoto:takephoto_library:4.1.0'

2.配置文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.leansmall.takephotov410demo">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.CAMERA"></uses-permission>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

3.布局文件

<?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=".MainActivity">

    <Button
        android:id="@+id/btnPhoto1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="拍照" />

    <Button
        android:id="@+id/btnPhoto2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="从相册获取" />

    <Button
        android:id="@+id/btnUpdate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:text="上传" />

    <ImageView
        android:id="@+id/ivPhoto"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


</LinearLayout>

4.代码文件:

package com.leansmall.takephotov410demo;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.ContextWrapper;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.bumptech.glide.Glide;

import org.devio.takephoto.app.TakePhoto;
import org.devio.takephoto.app.TakePhotoActivity;
import org.devio.takephoto.compress.CompressConfig;
import org.devio.takephoto.model.CropOptions;
import org.devio.takephoto.model.TResult;
import org.devio.takephoto.model.TakePhotoOptions;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends TakePhotoActivity {

    private Button btnPhoto;
    private Button btnPhotos;
    private Button btnUpdate;
    private ImageView ivPhoto;

    //动态权限
    String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
    List<String> mPermissionList = new ArrayList<>();
    private final int mRequestCode = 100;//权限请求码

    //TakePhoto
    private TakePhoto takePhoto;
    // private CropOptions cropOptions;    //裁剪参数

    private CompressConfig compressConfig;  //压缩参数
    private Uri imageUri;       //图片保存路径

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT >= 23) {  //6.0才用动态权限
            //申请相关权限
            initPermission();
        }
        initData();  //设置压缩、裁剪参数
        initView();
    }

    private void initData() {
        // 获取TakePhoto实例
        takePhoto = getTakePhoto();


        //设置压缩参数
        compressConfig=new CompressConfig.Builder().setMaxSize(100*1024).setMaxPixel(800).enableReserveRaw(true).create();
        takePhoto.onEnableCompress(compressConfig,true);  //设置为需要压缩显示进度条

        //设置拍照参数
        TakePhotoOptions.Builder builder = new TakePhotoOptions.Builder();
        builder.setWithOwnGallery(true);//takephoto自带相册
        builder.setCorrectImage(true);//纠正拍照旋转角度
        takePhoto.setTakePhotoOptions(builder.create());

    }
    private CropOptions getCropOptions() {
        //设置裁剪参数
        CropOptions.Builder builder = new CropOptions.Builder();
        builder.setOutputX(800);
        builder.setOutputY(800);
        builder.setWithOwnCrop(true);//自带剪切工具
        return builder.create();
    }

    private void initPermission() {
        mPermissionList.clear();        //清空没有通过的权限
        //逐个判断你要的权限是否已经通过
        for (int i = 0; i < permissions.length; i++) {
            if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
                mPermissionList.add(permissions[i]);//添加还未授予的权限
            }
        }
        //申请权限
        if (mPermissionList.size() > 0) {//有权限没有通过,需要申请
            ActivityCompat.requestPermissions(this, permissions, mRequestCode);
        } else {
            //说明权限都已经通过,可以做你想做的事情去
        }
    }

    private void initView() {
        btnPhoto = findViewById(R.id.btnPhoto1);
        btnPhotos = findViewById(R.id.btnPhoto2);
        btnUpdate = findViewById(R.id.btnUpdate);
        ivPhoto = findViewById(R.id.ivPhoto);

        btnPhoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i("1111111", "btnPhoto");
                imageUri = getImageCropUri();
                //拍照并裁剪,有BUG不能用

                //takePhoto.onPickFromCaptureWithCrop(imageUri, getCropOptions());
                //仅仅拍照不裁剪
                takePhoto.onPickFromCapture(imageUri);

            }
        });

        btnPhotos.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i("1111111", "btnPhotos");
//                onClickk(getTakePhoto());
                imageUri = getImageCropUri();
//                //从相册中选取图片并裁剪
                takePhoto.onPickFromGalleryWithCrop(imageUri, getCropOptions());
//                //从相册中选取不裁剪
                //takePhoto.onPickFromGallery();
            }
        });
    }

    private void configCompress(TakePhoto takePhoto) {      //压缩配置
        int maxSize = Integer.parseInt("409600");//最大 压缩
        int width = Integer.parseInt("800");//宽
        int height = Integer.parseInt("800");//高
        CompressConfig config;
        config = new CompressConfig.Builder().setMaxSize(maxSize)
                .setMaxPixel(width >= height ? width : height)
                .enableReserveRaw(false)//拍照压缩后是否显示原图
                .create();
        takePhoto.onEnableCompress(config, false);//是否显示进度条

    }

    @Override
    public void takeSuccess(TResult result) {
        super.takeSuccess(result);
        Log.i("1111111", "takeSuccess : " + result.getImage().getOriginalPath());
        super.takeSuccess(result);
        String iconPath = result.getImage().getOriginalPath();
        //Toast显示图片路径
        Log.i("1111111","imagePath:" + iconPath);
        Toast.makeText(this, "imagePath:" + iconPath, Toast.LENGTH_SHORT).show();
        //Google Glide库 用于加载图片资源
        Glide.with(this).load(iconPath).into(ivPhoto);
    }

    @Override
    public void takeFail(TResult result, String msg) {
        super.takeFail(result, msg);
        Log.i("1111111", "takeFail : " + msg);
    }

    @Override
    public void takeCancel() {
        super.takeCancel();
        Log.i("1111111", "takeCancel : " );
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        boolean hasPermissionDismiss = false;//有权限没有通过
        if (mRequestCode == requestCode) {
            for (int i = 0; i < grantResults.length; i++) {
                if (grantResults[i] == -1) {
                    hasPermissionDismiss = true;
                }
            }
            //如果有权限没有被允许
            if (hasPermissionDismiss) {
//                showPermissionDialog();//跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问
            } else {
                //全部权限通过,可以进行下一步操作。。。

            }
        }
    }

    //获得照片的输出保存Uri
    private Uri getImageCropUri() {
        ContextWrapper cw = new ContextWrapper(getApplicationContext());
        File directory = cw.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File file = new File(directory, System.currentTimeMillis() + ".jpg");

        // File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpg");
        if (!file.getParentFile().exists()) file.getParentFile().mkdirs();
        return Uri.fromFile(file);
    }

}
最近发表
标签列表