操作流程
点击拍摄
点击头像(我这里使用的是ImageView控件),然后点击拍摄,去申请权限,允许则打开相机 拍摄 然后进去裁剪框 选取合适的位置合适的大小 点击√,即设置成功
效果图
点击相册选择
点击头像,点击相册选择,允许权限则进去图库,选择图片 截取图片,设置成功
效果图
拒绝权限的情况
点击禁止则无操作,勾选禁止后不再提示,则弹出自定义dialog提示框,点击取消即关闭dialog,点击去设置则进入应用设置页面
效果图
功能实现
项目配置
1.先在项目根目录的build.gradle的repositories添加:
allprojects { repositories { ... maven { url "https://jitpack.io" } } }
【注意】切记不要跳过这一步,因为XUI目前只发布在jitpack平台上,跳过这一步会导致ERROR: Failed to resolve: com.github.xuexiangjys:XUI:x.x.x错误!!!
2.在build.gradle(:app)的dependencies添加:
// 裁剪相关 implementation 'com.github.yalantis:ucrop:2.2.6' // XUI dialog相关 implementation 'com.github.xuexiangjys:XUI:1.1.9' implementation 'com.github.xuexiangjys.XUtil:xutil-core:2.0.0' // 权限相关 implementation 'com.yanzhenjie:permission:2.0.2' // 加载图片 implementation 'com.github.bumptech.glide:glide:4.13.1'
3.添加提示dialog样式
如果使用弹出提示的XUI自定义dialog则需要在AndroidManifest.xml中application的主题添加样式
添加以下样式:
<style name="Theme.HeadPhotoTest" parent="XUITheme.Phone"> <!-- 自定义自己的主题样式 --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:textAllCaps">false</item> </style>
然后Ctrl点进colors.xml添加以下属性:
#2196F3
#121C4C
#2196F3
4.添加底部dialog样式
如果需要使用底部弹出dialog则需要在AndroidManifest.xml在application的主题中添加以下样式代码:
<!-- dialog样式 --> <style name="DialogTheme" parent="@android:style/Theme.Dialog"> <!-- 边框 --> <item name="android:windowFrame">@null</item> <!-- 是否浮现在activity之上 --> <item name="android:windowIsFloating">true</item> <!-- 半透明 --> <item name="android:windowIsTranslucent">true</item> <!-- 无标题 --> <item name="android:windowNoTitle">true</item> <item name="android:background">@android:color/transparent</item> <!-- 背景透明 --> <item name="android:windowBackground">@android:color/transparent</item> <!-- 模糊 --> <item name="android:backgroundDimEnabled">true</item> <!-- 遮罩层 --> <item name="android:backgroundDimAmount">0.5</item> </style> <!-- dialog的动画 --> <style name="main_menu_animStyle"> <item name="android:windowEnterAnimation">@drawable/dialog_in_anim</item> <item name="android:windowExitAnimation">@drawable/dialog_out_anim</item> </style>
底部dialog弹出动画(dialog_in_anim.xml)
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromXDelta="0" android:fromYDelta="1000" android:toXDelta="0" android:toYDelta="0" /> </set>
底部dialog关闭动画(dialog_out_anim.xml)
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="0" android:toYDelta="1000" /> </set>
5.添加权限
AndroidManifest.xml中加入以下权限代码:
<!-- 请求拍摄权限--> <uses-permission android:name="android.permission.CAMERA" /> <!-- 读写设备照片及文件--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
6.在AndroidManifest.xml中添加剪切activity活动
如果用到剪切功能需要添加,不用剪切功能则不需要添加
<activity android:name="com.yalantis.ucrop.UCropActivity" android:screenOrientation="portrait" android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
Android调用相机与相册的方法2:https://developer.aliyun.com/article/1473508