代码:http://download.youkuaiyun.com/detail/huangbin95487710/9260081
依赖包模式
完整运行还需要用到以下依赖包
风格:重定义样式无代码
- 属性配置,一般使用默认配置即可
- 配置摄像头模式(横竖屏切换)
- 配置是否裁剪
- 配置圆形裁剪图
- 配置裁剪宽度比例
- 配置同等比例裁剪
- 配置拍照原图压缩
- 配置裁剪4角触摸区域范围
<declare-styleable name="PhotoGraph"> <!-- 屏幕样式 --> <attr name="graph_orientation"> <enum name="landscape" value="0" /> <enum name="portrait" value="1" /> </attr> <!-- 裁剪结果模式 --> <attr name="graph_clip_mode"> <enum name="landscape" value="0" /> <enum name="portrait" value="1" /> <enum name="auto" value="2" /> </attr> <!-- 是否裁剪圆 --> <attr name="graph_iscircle" format="boolean" /> <!-- 裁剪宽比例 --> <attr name="graph_clip_width" format="integer" /> <!-- 裁剪高比例 --> <attr name="graph_clip_height" format="integer" /> <!-- 获取裁剪区域的大小(倍数) --> <attr name="graph_clip_size" format="float" /> <!-- 裁剪框以外的背景 --> <attr name="graph_clip_bg" format="color" /> <!-- 裁剪布局 --> <attr name="graph_layout_id" format="integer" /> <!-- 弹出布局 --> <attr name="graph_popup_layout_id" format="integer" /> <!-- 弹出布局返回按键 --> <attr name="graph_keycode_back" format="boolean" /> <!-- 是否裁剪 --> <attr name="graph_iscrop" format="boolean" /> <!-- 是否同等比例裁剪 --> <attr name="graph_auto_scale" format="boolean" /> <!-- 拍照原图压缩 --> <attr name="graph_fullscreen_compress" format="boolean" /> <!-- 获取4角触摸区域范围 --> <attr name="graph_hysteresis" format="float" /> </declare-styleable>
- 默认样式
<style name="DivPhotoGraph"> <item name="graph_orientation">portrait</item> <item name="graph_clip_mode">auto</item> <item name="graph_iscircle">false</item> <item name="graph_clip_width">1</item> <item name="graph_clip_height">1</item> <item name="graph_clip_size">1.5</item> <item name="graph_clip_bg">#80505050</item> <item name="graph_layout_id">@layout/photograph</item> <item name="graph_popup_layout_id">@layout/photograph_pop</item> <item name="graph_keycode_back">true</item> <item name="graph_iscrop">true</item> <item name="graph_auto_scale">true</item> <item name="graph_fullscreen_compress">true</item> <item name="graph_hysteresis">200.0</item> </style>
- 代码示例
- 重定义样式
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- 重写样式 --> <style name="MyDivPhotoGraph" parent="@style/DivPhotoGraph"> <item name="graph_clip_width">4</item> <item name="graph_clip_height">3</item> <item name="graph_iscircle">true</item> </style> <!-- 重写样式 --> <style name="MyDivPhotoGraph1" parent="@style/DivPhotoGraph"> <item name="graph_iscrop">false</item> </style> </resources>
- 代码
package cn.whonow.whonow.photograph; import General.CropPic.PhotoGraph; import General.CropPic.Listener.CropListener; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import cn.whonow.whonow.R; /** * 拍照上传 必须实现CropListener接口 * * @author HuangYi QQ:95487710 */ public class PhotoGraphActivity extends Activity implements CropListener { private PhotoGraph mPhotoGraph; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_photograph); Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // "拍照上传" mPhotoGraph = new PhotoGraph(PhotoGraphActivity.this, PhotoGraphActivity.this); mPhotoGraph.doPopup(); } }); Button button2 = (Button) findViewById(R.id.button2); button2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 自定义样式 mPhotoGraph = new PhotoGraph(PhotoGraphActivity.this, R.style.MyDivPhotoGraph, PhotoGraphActivity.this); mPhotoGraph.doPopup(R.id.ll); } }); Button button3 = (Button) findViewById(R.id.button3); button3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // "不裁剪样式" mPhotoGraph = new PhotoGraph(PhotoGraphActivity.this, R.style.MyDivPhotoGraph1, PhotoGraphActivity.this); mPhotoGraph.doPopup(R.id.ll); } }); } /** 必须重写 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (mPhotoGraph != null) { mPhotoGraph.onActivityResult(requestCode, resultCode, data); } } @Override public void onSucess(String mPath) { // 成功返回SDCARD路径 } @Override public void onError(String mError) { // 错误 } @Override public void onCancel() { // 取消 } }
- AndroidManifest.xml添加配置
<application> <!-- ###################拍照上传################### --> <activity android:name="app.general.lib.CropImageActivity" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.NoTitleBar" /> <!-- ###################拍照上传################### --> </application> <!-- ###################拍照上传################### --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- ###################拍照上传################### -->
- 特殊定制布局
- 复制以下的XML文件到目标项目,在保持ID不变下,可任意更改界面
- photograph_pop.xml,photograph.xml
- 效果图