Android圆形头像设置(实现相机、相册选择并裁剪)兼容6.0/7.0

本文介绍了如何在Android 7.0和6.0上实现圆形头像的设置,包括相机拍照、相册选择图片并进行裁剪的兼容性处理。涉及AndroidManifest.xml的provider配置、filepaths.xml的创建、自定义圆形ImageView、相机和相册的使用,以及权限管理。提供了适配Android 7.0新特性如FileUriExposedException的方法。
摘要由CSDN通过智能技术生成

Android圆形头像设置(实现相机、相册选择并裁剪)兼容Android 7.0/6.0

Android7.0新增了权限修改、目录被限制访问、多窗口 等等,最近在做头像设置的时候,运行到Android7.0的机子上,拍照和进图库都报错:FileUriExposedException,又要进行适配了,先来看一下官方解释:
这里写图片描述

下面就是我做的适配方法,仅供参考,有啥问题一起讨论解决:

AndroidManifest.xml 增加provider定义

        <provider
            android:name="android.support.v4.content.FileProvider"  //固定
            android:authorities="com.lele.avatarcircledemo.fileprovider"//路径 前面为包名,后面为fileprovider固定值,使用包名便于区分
            android:exported="false"//是否支持其它应用调用当前组件 ,要求为flase
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"//固定值
                android:resource="@xml/file_paths" />//在res目录下定义的filepaths.xml文件,名字可以自定义
        </provider>

配置XML文件

在res下创建xml文件夹,并创建filepaths.xml文件,名字可以自定义

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="camera_photos"
        path="demo" />
</paths>

圆形ImageView自定义控件

/**
 * 圆形头像设置
 */

@SuppressLint("AppCompatCustomView")
public class CircleImageView extends ImageView {
   

    private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP;

    private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888;
    private static final int COLORDRAWABLE_DIMENSION = 2;

    private static final int DEFAULT_BORDER_WIDTH = 0;
    private static final int DEFAULT_BORDER_COLOR = Color.BLACK;

    private final RectF mDrawableRect = new RectF();
    private final RectF mBorderRect = new RectF();

    private final Matrix mShaderMatrix = new Matrix();
    private final Paint mBitmapPaint = new Paint();
    private final Paint mBorderPaint = new Paint();

    private int mBorderColor = DEFAULT_BORDER_COLOR;
    private int mBorderWidth = DEFAULT_BORDER_WIDTH;

    private Bitmap mBitmap;
    private BitmapShader mBitmapShader;
    private int mBitmapWidth;
    private int mBitmapHeight;

    private float mDrawableRadius;
    private float mBorderRadius;

    private boolean mReady;
    <
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Owen_le

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值