Android快速SDK(13)拍照裁剪库PhotoGraph【傻瓜模式】

本文介绍了Android快速SDK中的拍照裁剪库PhotoGraph的使用,包括依赖包、配置项和代码示例。通过自定义样式,可以实现不同比例裁剪、圆形裁剪等功能,同时支持拍照原图压缩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:http://download.youkuaiyun.com/detail/huangbin95487710/9260081

依赖包模式

完整运行还需要用到以下依赖包

风格:重定义样式无代码

  1. 属性配置,一般使用默认配置即可
    • 配置摄像头模式(横竖屏切换)
    • 配置是否裁剪
    • 配置圆形裁剪图
    • 配置裁剪宽度比例
    • 配置同等比例裁剪
    • 配置拍照原图压缩
    • 配置裁剪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>

  2. 代码示例
    • 重定义样式
    • <?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() {
      		// 取消
      
      	}
      
      }

  3. 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" />
          <!-- ###################拍照上传################### -->

  4. 特殊定制布局
    • 复制以下的XML文件到目标项目,在保持ID不变下,可任意更改界面
    • photograph_pop.xml,photograph.xml
  5. 效果图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值