腾讯大牛动态教学:Android 仿微信 QQ 图片裁剪,赶紧收藏起来!

本文介绍了如何在Android中实现类似微信和QQ的图片裁剪功能,包括拍照、相册选择图片、裁剪框样式(圆形、正方形、九宫格)以及图片的缩放、移动和裁剪。详细讲解了裁剪框的实现、蒙层绘制、裁剪功能的逻辑以及图片缩放的原理。提供了两种调用方式和Demo下载链接,涵盖Android权限申请、事件分发和自定义View等技术。
摘要由CSDN通过智能技术生成

前言

在平时开发中,经常需要实现这样的功能,拍照 - 裁剪,相册 - 裁剪。当然,系统也有裁剪的功能,但是由于机型,系统兼容性等问题,在实际开发当中,我们通常会自己进行实现。今天,就让我们一起来看看怎样实现。

这篇博客实现的功能主要有仿微信,QQ 上传图像裁剪功能,包括拍照,从相册选取。裁剪框的样式有圆形,正方形,九宫格。

主要讲解的功能点

  1. 使用说明
  2. 整体的实现思路
  3. 裁剪框的实现
  4. 图片缩放的实现,包括放大,缩小,移动,裁剪等

我们先来看看我们实现的效果图

使用说明

有两种调用方式

第一种

第一种,使用普通的 startActivityForResult 进行调用,并重写 onActivityResult 方法,在里面根据 requestCode 进行处理

 1ClipImageActivity.goToClipActivity(this, uri);
 2@Override
 3protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
 4    switch (requestCode) {
 5        case REQ_CLIP_AVATAR:  //剪切图片返回
 6            if (resultCode == RESULT_OK) {
 7                final Uri uri = intent.getData();
 8                if (uri == null) {
 9                    return;
10                }
11                String cropImagePath = FileUtil.getRealFilePathFromUri(getApplicationContext(), uri);
12
13
14    ----
15
16}

第二种

第二种调用 ClipImageActivity.goToClipActivity 方法,结果以 callBack 回调的方式返回回来,这种看起来比较直观点,个人也比较喜欢这种方法。它的实现原理是通过空白的 fragment 处理实现的,有兴趣的可以看我这一篇博客 Android Fragment 的妙用 - 优雅地申请权限和处理 onActivityResult

1ClipImageActivity.goToClipActivity(this, uri, new ActivityResultHelper.Callback() {
2    @Override
3    public void onActivityResult(int resultCode, Intent data) {
4
5    }
6});

整体实现思路

从上面的效果图我们可以看到,裁剪功能主要包括两大块

  1. 裁剪框
  2. 图片的缩放,移动,裁剪等

因此,为了方便日后的修改,我们将裁剪框的功能单独提取出来,图片缩放功能提出出来。即裁剪框单独一个 View。

下面,让我们一起来看看裁剪框功能的实现。

裁剪框功能的实现

裁剪框主要有两层,第一层,裁剪框的实现(包括圆形,长方形,九宫格形状),第二层,在裁剪区域上面盖上一层蒙层。

蒙层

蒙层的实现我们是通过 Xfermode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值