网站首页 > 技术文章 正文
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);
}
}
猜你喜欢
- 2024-09-12 Android的快速开发框架 afinal(android开发框架搭建)
- 2024-09-12 Flutter插件用于在移动平台中播放视频支持iOS和Android建议收藏
- 2024-09-12 赞!编程中Facebook图片加载库Fresco的使用方法!
- 2024-09-12 构建私有化APP系统消息推送(不依赖任何云服务)
- 2024-09-12 Flutter:实现视频播放的基本步骤(flutter视频列表)
- 2024-09-12 七爪源码:如何在 Android Webview 中使用 Javascript 注入
- 2024-09-12 打造您自己的Drozer模块,测试Android应用安全
- 2024-09-12 Android之打包后无法网络请求(android打包命令)
- 2024-09-12 Webview的使用和面试常见问题(webview go)
- 2024-09-12 基于安卓操作系统的手机端软电话SDK开发包
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)