Skip to content

Commit 2c6e1f8

Browse files
committed
fix #30
fix #27 fix #23 fix #32
1 parent a1f7dcd commit 2c6e1f8

File tree

9 files changed

+154
-15
lines changed

9 files changed

+154
-15
lines changed

README.md

Lines changed: 108 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ GitHub地址: [https://github.com/crazycodeboy/TakePhoto](https://github.com/c
2525
- [安装说明](#安装说明)
2626
- [演示](#演示)
2727
- [使用说明](#使用说明)
28+
- [自定义UI](#自定义ui)
2829
- [API](#api)
2930
- [兼容性](#兼容性)
3031
- [贡献](#贡献)
32+
- [最后](#混淆)
3133

3234
## 安装说明
3335
**Gradle:**
@@ -118,6 +120,94 @@ GitHub地址: [https://github.com/crazycodeboy/TakePhoto](https://github.com/c
118120
}
119121
```
120122

123+
## 自定义UI
124+
125+
TakePhoto不仅支持对相关参数的自定义,也支持对UI的自定义,下面就像大家介绍如何自定义TakePhoto的相册与裁剪工具的UI。
126+
127+
### 自定义相册
128+
如果TakePhoto自带相册的UI不符合你应用的主题的话,你可以对它进行自定义。方法如下:
129+
130+
#### 自定义Toolbar
131+
132+
在“res/layout”目录中创建一个名为“toolbar.xml”的布局文件,内容如下:
133+
134+
```xml
135+
<?xml version="1.0" encoding="utf-8"?>
136+
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
137+
xmlns:app="http://schemas.android.com/apk/res-auto"
138+
android:layout_width="match_parent"
139+
android:layout_height="?attr/actionBarSize"
140+
app:theme="@style/CustomToolbarTheme"
141+
android:background="#ffa352">
142+
</android.support.v7.widget.Toolbar>
143+
```
144+
145+
在“toolbar.xml”文件中你可以指定TakePhoto自带相册的主题以及Toolbar的背景色。
146+
147+
#### 自定义提示文字
148+
149+
在“res/values”目录的“string.xml”文件冲添加如下代码:
150+
151+
```xml
152+
<resources>
153+
<string name="album_view">选择图片</string>
154+
<string name="image_view">单击选择</string>
155+
<string name="add">确定</string>
156+
<string name="selected">已选</string>
157+
<string name="limit_exceeded">最多能选 %d 张</string>
158+
</resources>
159+
```
160+
161+
重写上述代码,便可以自定义TakePhoto自带相册的提示文字。
162+
163+
### 自定义裁切工具
164+
165+
在“res/layout”目录中创建一个名为“crop__activity_crop.xml”与“crop__layout_done_cancel.xml”的布局文件,内容如下:
166+
167+
**crop__activity_crop.xml**
168+
169+
```xml
170+
<?xml version="1.0" encoding="utf-8"?>
171+
<RelativeLayout
172+
xmlns:android="http://schemas.android.com/apk/res/android"
173+
android:layout_width="match_parent"
174+
android:layout_height="match_parent">
175+
<com.soundcloud.android.crop.CropImageView
176+
android:id="@+id/crop_image"
177+
android:layout_width="match_parent"
178+
android:layout_height="match_parent"
179+
android:layout_alignParentTop="true"
180+
android:background="@drawable/crop__texture"
181+
android:layout_above="@+id/done_cancel_bar" />
182+
<include
183+
android:id="@+id/done_cancel_bar"
184+
android:layout_alignParentBottom="true"
185+
layout="@layout/crop__layout_done_cancel"
186+
android:layout_height="50dp"
187+
android:layout_width="match_parent" />
188+
</RelativeLayout>
189+
```
190+
191+
**crop__layout_done_cancel.xml**
192+
193+
```xml
194+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
195+
style="@style/Crop.DoneCancelBar">
196+
<FrameLayout
197+
android:id="@+id/btn_cancel"
198+
style="@style/Crop.ActionButton">
199+
<TextView style="@style/Crop.ActionButtonText.Cancel" />
200+
</FrameLayout>
201+
<FrameLayout
202+
android:id="@+id/btn_done"
203+
style="@style/Crop.ActionButton">
204+
<TextView style="@style/Crop.ActionButtonText.Done" />
205+
</FrameLayout>
206+
</LinearLayout>
207+
```
208+
209+
重写上述代码,便可以自定义TakePhoto裁切工具的UI。
210+
121211
## API
122212

123213
### 获取图片
@@ -296,6 +386,22 @@ eg:
296386
</activity>
297387
```
298388

299-
300389
## 贡献
301-
如果你在使用TakePhoto中遇到任何问题可以提[Issues](https://github.com/crazycodeboy/TakePhoto/issues)出来。另外欢迎大家为TakePhoto贡献智慧,欢迎大家[Fork and Pull requests](https://github.com/crazycodeboy/TakePhoto)
390+
如果你在使用TakePhoto中遇到任何问题可以提[Issues](https://github.com/crazycodeboy/TakePhoto/issues)出来。另外欢迎大家为TakePhoto贡献智慧,欢迎大家[Fork and Pull requests](https://github.com/crazycodeboy/TakePhoto)
391+
392+
## 最后
393+
394+
### 关于代码混淆
395+
如果你的项目中启用了代码混淆,可在混淆规则文件(如:proguard-rules.pro)中添加如下代码:
396+
397+
```
398+
-keep class com.jph.takephoto.** { *; }
399+
-dontwarn com.jph.takephoto.**
400+
401+
-keep class com.darsh.multipleimageselect.** { *; }
402+
-dontwarn com.darsh.multipleimageselect.**
403+
404+
-keep class com.soundcloud.android.crop.** { *; }
405+
-dontwarn com.soundcloud.android.crop.**
406+
407+
```

simple/proguard-rules.pro

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,10 @@
1515
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
1616
# public *;
1717
#}
18+
19+
-dontwarn android.support.**
20+
-keep class android.support.** { *; }
21+
22+
23+
-keepattributes InnerClasses
24+
-dontoptimize

takephoto_library/proguard-rules.pro

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,22 @@
1515
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
1616
# public *;
1717
#}
18+
19+
20+
-dontwarn android.support.**
21+
-keep class android.support.** { *; }
22+
23+
24+
-keepattributes InnerClasses
25+
-dontoptimize
26+
27+
28+
-keep class com.jph.takephoto.** { *; }
29+
-dontwarn com.jph.takephoto.**
30+
31+
-keep class com.darsh.multipleimageselect.** { *; }
32+
-dontwarn com.darsh.multipleimageselect.**
33+
34+
-keep class com.soundcloud.android.crop.** { *; }
35+
-dontwarn com.soundcloud.android.crop.**
36+

takephoto_library/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<activity android:name="com.soundcloud.android.crop.CropImageActivity" />
99
<provider
1010
android:name="android.support.v4.content.FileProvider"
11-
android:authorities="com.jph.takephoto.fileprovider"
11+
android:authorities="${applicationId}.fileprovider"
1212
android:grantUriPermissions="true"
1313
android:exported="false">
1414
<meta-data

takephoto_library/src/main/java/com/jph/takephoto/app/TakePhotoImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,9 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
154154
break;
155155
case TConstant.RC_PICK_PICTURE_FROM_CAPTURE_CROP://拍取照片,并裁剪
156156
if (resultCode == Activity.RESULT_OK) {
157-
ImageRotateUtil.of().correctImage(tempUri);
157+
ImageRotateUtil.of().correctImage(contextWrap.getActivity(),tempUri);
158158
try {
159-
onCrop(tempUri,Uri.fromFile(new File(TUriParse.parseOwnUri(outPutUri))), cropOptions);
159+
onCrop(tempUri,Uri.fromFile(new File(TUriParse.parseOwnUri(contextWrap.getActivity(),outPutUri))), cropOptions);
160160
} catch (TException e) {
161161
takeResult(TResult.of(TImage.of(outPutUri)), e.getDetailMessage());
162162
e.printStackTrace();
@@ -167,7 +167,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
167167
break;
168168
case TConstant.RC_PICK_PICTURE_FROM_CAPTURE://拍取照片
169169
if (resultCode == Activity.RESULT_OK) {
170-
ImageRotateUtil.of().correctImage(outPutUri);
170+
ImageRotateUtil.of().correctImage(contextWrap.getActivity(),outPutUri);
171171
try {
172172
takeResult(TResult.of(TImage.of(TUriParse.getFilePathWithUri(outPutUri, contextWrap.getActivity()))));
173173
} catch (TException e) {

takephoto_library/src/main/java/com/jph/takephoto/uitl/ImageRotateUtil.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.jph.takephoto.uitl;
22

3+
import android.content.Context;
34
import android.graphics.Bitmap;
45
import android.graphics.BitmapFactory;
56
import android.graphics.Matrix;
@@ -33,9 +34,9 @@ private ImageRotateUtil() {
3334
* 纠正照片的旋转角度
3435
* @param path
3536
*/
36-
public void correctImage(Uri path){
37+
public void correctImage(Context context,Uri path){
3738

38-
String imagePath=TUriParse.parseOwnUri(path);
39+
String imagePath=TUriParse.parseOwnUri(context,path);
3940
int degree;
4041
if((degree=getBitmapDegree(imagePath))!=0){
4142
Bitmap bitmap= BitmapFactory.decodeFile(imagePath);

takephoto_library/src/main/java/com/jph/takephoto/uitl/TConstant.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.jph.takephoto.uitl;
22

3+
import android.content.Context;
4+
35
/**
46
* 常量类
57
* @author JPH
68
* Date 2016/6/7 0007 9:39
79
*/
810
public class TConstant {
911

10-
public final static String FILE_PROVIDER="com.jph.takephoto.fileprovider";
12+
1113
/**
1214
* request Code 裁剪照片
1315
**/
@@ -46,4 +48,8 @@ public class TConstant {
4648
* requestCode 请求权限
4749
**/
4850
public final static int PERMISSION_REQUEST_TAKE_PHOTO = 2000;
51+
52+
public final static String getFileProviderName(Context context){
53+
return context.getPackageName()+".fileprovider";
54+
}
4955
}

takephoto_library/src/main/java/com/jph/takephoto/uitl/TUriParse.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public static Uri convertFileUriToFileProviderUri(Context context,Uri uri){
4949
* @return
5050
*/
5151
public static Uri getUriForFile(Context context, File file) {
52-
return FileProvider.getUriForFile(context,TConstant.FILE_PROVIDER, file);
52+
return FileProvider.getUriForFile(context,TConstant.getFileProviderName(context), file);
5353
}
5454

5555
/**
@@ -69,10 +69,10 @@ public static Uri getTempUri(Context context){
6969
* @param uri
7070
* @return
7171
*/
72-
public static String parseOwnUri(Uri uri){
72+
public static String parseOwnUri(Context context,Uri uri){
7373
if(uri==null)return null;
7474
String path;
75-
if(TextUtils.equals(uri.getAuthority(),TConstant.FILE_PROVIDER)){
75+
if(TextUtils.equals(uri.getAuthority(),TConstant.getFileProviderName(context))){
7676
path=new File(Environment.getExternalStorageDirectory(),uri.getPath().replace("camera_photos/","")).getAbsolutePath();
7777
}else {
7878
path=uri.getPath();
@@ -102,8 +102,8 @@ public static String getFilePathWithUri(Uri uri, Activity activity)throws TExcep
102102
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
103103
if(columnIndex>=0){
104104
picturePath = cursor.getString(columnIndex); //获取照片路径
105-
}else if(TextUtils.equals(uri.getAuthority(),TConstant.FILE_PROVIDER)){
106-
picturePath=parseOwnUri(uri);
105+
}else if(TextUtils.equals(uri.getAuthority(),TConstant.getFileProviderName(activity))){
106+
picturePath=parseOwnUri(activity,uri);
107107
}
108108
cursor.close();
109109
}else if (ContentResolver.SCHEME_FILE.equals(scheme)){

takephoto_library/src/main/java/com/jph/takephoto/uitl/TUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class TUtils {
4343
public static ArrayList<Uri> convertImageToUri(Context context,ArrayList<Image>images) throws TException {
4444
ArrayList<Uri>uris=new ArrayList();
4545
for(Image image:images){
46-
uris.add(FileProvider.getUriForFile(context,TConstant.FILE_PROVIDER, new File(image.path)));
46+
uris.add(FileProvider.getUriForFile(context,TConstant.getFileProviderName(context), new File(image.path)));
4747
}
4848
return uris;
4949
}

0 commit comments

Comments
 (0)