跳转至

裁剪控件

CropViewLayout 是一个裁剪控件,目的是帮助你快速构建自己的裁剪页面。

快速使用

Version 0.5.0

  <com.ave.vastgui.tools.view.cropview.CropViewLayout
      android:id="@+id/cropViewLayout"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

查看默认样式

调用裁剪

调用系统裁剪

你可以使用 CropIntent 来调用系统裁剪。

调用 VastCropActivity

Version 0.5.0

VastCropActivity 是默认提供的裁剪应用,你可以通过下面的方式来轻松的使用它。

//  AndroidManifest.xml 中声明
<activity
    android:name="com.ave.vastgui.tools.activity.app.VastCropActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
// 使用 intent 来启动
val intent = Intent(this, VastCropActivity::class.java).apply {
    data = originalImageUri
    putExtra(VastCropActivity.FRAME_TYPE, VastCropActivity.FRAME_TYPE_GRID9)
    putExtra(VastCropActivity.OUTPUT_X, 300f)
    putExtra(VastCropActivity.OUTPUT_Y, 300f)
}

更多使用还请参考 VastCropActivity.kt 的定义。

设置预览框的类型

Version 0.5.0

调用 setCropFrameType 来设置预览框的形状,目前支持四种:

类型 示例 类型 示例
CIRCLE Frame circle SQUARE Frame square
GRID9 Frame grid9 RECTANGLE Frame rectangle
getBinding().cropViewLayout.setCropFrameType(CropFrameType.CIRCLE)

设置预览框的大小

Version 0.5.0

调用 setCropFrameSize 来设置预览框的大小。

getBinding().cropViewLayout.setCropFrameSize(previewWidth, previewHeight)

关于预览框的大小设置说明

只有当预览框的类型是 RECTANGLE 时设置的不相同的长和宽才会生效,否则会取设置的长和宽中的较小值作为实际的预览框尺寸。

设置预览框的蒙版颜色

Version 0.5.0

调用 setCropMaskColor 来设置蒙版颜色。

// 设置颜色
getBinding().cropViewLayout.setCropMaskColor(color)

蒙版颜色说明

建议采用带透明度的颜色效果会更好。

CropViewLayout with mask color

设置设置预览框的边框颜色

Version 0.5.0

调用 setCropFrameStrokeColor 来设置蒙版颜色

// 获取颜色
val color = ColorUtils.colorHex2Int("#e74c3c")

// 设置颜色
getBinding().cropViewLayout.setCropFrameStrokeColor(color)

CropViewLayout with stroke color

获取裁剪照片

Version 0.5.0

过时说明

因为 setDrawingCacheEnabledbuildDrawingCache 相关 API 在 API 28 过时,因而提供了两种方式获取裁剪照片。

对 Android 9 的适配(API 28开始)

val bitmap:Bitmap? = 
    getBinding().cropViewLayout.getCroppedImageAboveApi28(outputX,outputY)

对 Android 8 及以下的适配

val bitmap:Bitmap? =
    getBinding().cropViewLayout.getCroppedImageUnderApi28(outputX,outputY)

示例代码

查看示例代码