Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

# ImagePicker

[![Release](https://jitpack.io/v/TranscodeGroup/ImagePicker.svg)](https://jitpack.io/#TranscodeGroup/ImagePicker)

> 项目地址:https://github.com/linchaolong/ImagePicker

ImagePicker 是 Android 下的图片选择与裁剪开源库,基于 [Android-Image-Cropper](https://github.com/ArthurHub/Android-Image-Cropper) 并做了如下改进:
Expand Down
24 changes: 12 additions & 12 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
namespace 'com.linchaolong.android.imagepicker.demo'
compileSdk 34
defaultConfig {
applicationId "com.linchaolong.android.imagepicker.demo"
minSdkVersion 14
targetSdkVersion 28
minSdkVersion 21
targetSdkVersion 34
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
buildTypes {
release {
Expand All @@ -20,13 +20,13 @@ android {
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation 'com.android.support:appcompat-v7:28.0.0'
testImplementation 'junit:junit:4.12'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'com.facebook.fresco:fresco:1.1.0'
implementation 'com.linchaolong.android:imagepicker:1.5'
// compile project(path: ':library')
// implementation 'com.linchaolong.android:imagepicker:1.5'
implementation project(path: ':library')

testImplementation "junit:junit:4.13.2"
androidTestImplementation "androidx.test.ext:junit:1.1.5"
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}

Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.linchaolong.android.imagepicker.demo;

import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;

import org.junit.Test;
import org.junit.runner.RunWith;
Expand All @@ -17,7 +17,7 @@
@RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest {
@Test public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();

assertEquals("com.linchaolong.android.imagepicker", appContext.getPackageName());
}
Expand Down
13 changes: 10 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.linchaolong.android.imagepicker.demo">
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET" />
<!-- 仅用与测试, 项目中不要使用该权限, Google Play不允许 -->
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />

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

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.linchaolong.android.imagepicker.demo;

import android.support.v7.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class FragmentTestActivity extends AppCompatActivity {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;

import com.facebook.drawee.generic.RoundingParams;
import com.facebook.drawee.view.SimpleDraweeView;
import com.linchaolong.android.imagepicker.ImagePicker;
Expand All @@ -14,76 +15,71 @@

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private ImagePicker imagePicker = new ImagePicker();
private SimpleDraweeView draweeView;

@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
private ImagePicker imagePicker;
private SimpleDraweeView draweeView;

// 设置标题
imagePicker.setTitle("设置头像");
// 设置是否裁剪图片
imagePicker.setCropImage(true);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.fragmentTest).setOnClickListener(this);
draweeView = findViewById(R.id.draweeView);
draweeView.setOnClickListener(this);

findViewById(R.id.fragmentTest).setOnClickListener(this);
draweeView = findViewById(R.id.draweeView);
draweeView.setOnClickListener(this);
}
imagePicker = new ImagePicker(this, new ImagePicker.Callback() {
// 选择图片回调
@Override
public void onPickImage(Uri imageUri) {

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
imagePicker.onActivityResult(this, requestCode, resultCode, data);
}
}

@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
imagePicker.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}
// 裁剪图片回调
@Override
public void onCropImage(Uri imageUri) {
draweeView.setImageURI(imageUri);
draweeView.getHierarchy().setRoundingParams(RoundingParams.asCircle());
}

private void startChooser() {
// 启动图片选择器
imagePicker.startChooser(this, new ImagePicker.Callback() {
// 选择图片回调
@Override public void onPickImage(Uri imageUri) {
// 自定义裁剪配置
@Override
public void cropConfig(CropImage.ActivityBuilder builder) {
builder
// 是否启动多点触摸
.setMultiTouchEnabled(false)
// 设置网格显示模式
.setGuidelines(CropImageView.Guidelines.OFF)
// 圆形/矩形
.setCropShape(CropImageView.CropShape.RECTANGLE)
// 调整裁剪后的图片最终大小
.setRequestedSize(960, 540)
// 宽高比
.setAspectRatio(16, 9);
}

}
// 用户拒绝授权回调
@Override
public void onPermissionDenied(String permissions) {
}
});

// 裁剪图片回调
@Override public void onCropImage(Uri imageUri) {
draweeView.setImageURI(imageUri);
draweeView.getHierarchy().setRoundingParams(RoundingParams.asCircle());
}

// 自定义裁剪配置
@Override public void cropConfig(CropImage.ActivityBuilder builder) {
builder
// 是否启动多点触摸
.setMultiTouchEnabled(false)
// 设置网格显示模式
.setGuidelines(CropImageView.Guidelines.OFF)
// 圆形/矩形
.setCropShape(CropImageView.CropShape.RECTANGLE)
// 调整裁剪后的图片最终大小
.setRequestedSize(960, 540)
// 宽高比
.setAspectRatio(16, 9);
}
// 设置标题
imagePicker.setTitle("设置头像");
// 设置是否裁剪图片
imagePicker.setCropImage(true);
}

// 用户拒绝授权回调
@Override public void onPermissionDenied(int requestCode, String[] permissions,
int[] grantResults) {
}
});
}
private void startChooser() {
// 启动图片选择器
imagePicker.startChooser();
}

@Override public void onClick(View v) {
if (v.getId() == R.id.draweeView) {
startChooser();
} else if (v.getId() == R.id.fragmentTest) {
startActivity(new Intent(this, FragmentTestActivity.class));
@Override
public void onClick(View v) {
if (v.getId() == R.id.draweeView) {
startChooser();
} else if (v.getId() == R.id.fragmentTest) {
startActivity(new Intent(this, FragmentTestActivity.class));
}
}
}
}

Original file line number Diff line number Diff line change
@@ -1,87 +1,80 @@
package com.linchaolong.android.imagepicker.demo;

import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.facebook.drawee.generic.RoundingParams;
import com.facebook.drawee.view.SimpleDraweeView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;

import com.linchaolong.android.imagepicker.ImagePicker;
import com.linchaolong.android.imagepicker.cropper.CropImage;
import com.linchaolong.android.imagepicker.cropper.CropImageView;

/**
* Created by linchaolong on 2017/3/21.
*/
public class TestFragment extends Fragment {

private ImagePicker imagePicker = new ImagePicker();
private ImageView imageView;
private CropImageView cropImageView;

@Nullable @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.fragment_test, null);
init(contentView);
return contentView;
}

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
imagePicker.onActivityResult(this, requestCode, resultCode, data);
}

@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
imagePicker.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}

private void init(View contentView) {
imageView = (ImageView) contentView.findViewById(R.id.imageView);
cropImageView = (CropImageView) contentView.findViewById(R.id.cropImageView);
contentView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
startCameraOrGallery();
}
});
}
private ImagePicker imagePicker;
private ImageView imageView;
private CropImageView cropImageView;

private void startCameraOrGallery() {
new AlertDialog.Builder(getActivity()).setTitle("设置头像")
.setItems(new String[] { "从相册中选取图片", "拍照" }, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
// 回调
ImagePicker.Callback callback = new ImagePicker.Callback() {
@Override public void onPickImage(Uri imageUri) {
}

@Override public void onCropImage(Uri imageUri) {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
imagePicker = new ImagePicker(this, new ImagePicker.Callback() {
@Override
public void onCropImage(Uri imageUri) {
imageView.setImageURI(imageUri);
cropImageView.setImageUriAsync(imageUri);
}
};
if (which == 0) {
// 从相册中选取图片
imagePicker.startGallery(TestFragment.this, callback);
} else {
// 拍照
imagePicker.startCamera(TestFragment.this, callback);
}
}
})
.show()
.getWindow()
.setGravity(Gravity.BOTTOM);
}
});
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.fragment_test, null);
init(contentView);
return contentView;
}

private void init(View contentView) {
imageView = (ImageView) contentView.findViewById(R.id.imageView);
cropImageView = (CropImageView) contentView.findViewById(R.id.cropImageView);
contentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startCameraOrGallery();
}
});
}

private void startCameraOrGallery() {
new AlertDialog.Builder(getActivity()).setTitle("设置头像")
.setItems(new String[]{"选择器(Chooser)", "从相册中选取图片(Gallery)", "拍照(Camera)"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
imagePicker.startChooser();
} else if (which == 1) {
// 从相册中选取图片
imagePicker.startGallery();
} else {
// 拍照
imagePicker.startCamera();
}
}
})
.show()
.getWindow()
.setGravity(Gravity.BOTTOM);
}
}
Loading