首页 > 编程知识 正文

android开发实战经典PDF,最右怎么换头像框

时间:2023-05-03 23:19:29 阅读:58723 作者:1499

一.图像选择

1.1目标

1 .出现了实现如图所示功能的:相册和照相机的选择

2 .可以修剪所选图像

1.2功能实现

1.2.1互联网工具类软件包

封装图像选择和图像裁剪的工具类

//*

选择照片(来自相册或相机) ) ) ) ) ) )。

* @param uri相机存储uri

* @return

*/

publicstaticintentgetphotoselectintent (uri uri ) {

intent take=new intent (mediastore.action _ image _ capture;

take.add category (intent.category _ default;

take.put extra (mediastore.extra _ output,uri );

intent pics=new intent (intent.action _ pick,mediastore.images.media.external _ content _ u u uri );

intent chose=intent.create chooser (pics,'选择图像');

chose.put extra (intent.extra _ initial _ intents,new Parcelable[]{take} );

返回选择;

}

//*

*图像裁剪

* @需要* @param inputUri修剪的图像

* @param outputUri修剪后的子库存

* @param width修剪宽度

* @param height裁剪高度

* @return

*/

publicstaticintentgetimagecropintent (uriinputuri,Uri outputUri,int width,int height ) {

intent intent=new intent (com.Android.camera.action.crop );

intent.setdataandtype(inputuri,' image/* ';

//以下crop=true允许视图修剪,以在打开的Intent中设置显示

intent.putextra('crop ',' true ' );

intent.putextra('scale ',true ); //去黑边

intent.put extra (scaleupifneeded )、true; //去黑边

//aspectX aspectY剪裁框的高度比率

intent.putextra(AspectX )、width ); //输出为x方向的比例

intent.putextra(aspecty )、height );

//outputX outputY输出图像的宽度较大,请不要更改以下数字。 卡住了

intent.putextra('outputx ',width ); //输出x方向像素

intent.putextra('outputy ',height );

intent.putextra('outputformat ',bitmap.compress format.JPEG.tostring ) );

intent.put extra (' no face detection ',true );

intent.put extra (mediastore.extra _ output,outputUri );

intent.putextra('return-data ',false ); //设定为不返回数据

返回英特尔;

}

1.2.2添加点击图片选择事件

b.ivAvatar.setOnClickListener {

mtakephotofile=file (get picpath (file.separatorsystem.current time millis ().jpeg ) ) )。

val uri=uri.from file (mtakephotofile ) )。

startactivityforresult (intent utils.getphotoselectintent (uri ),TAKE_PHOTO_REQ ) )

}

1.2.3图像选择和修整反馈的处理

剪切图像所需的Uri类似于content://的形式,因此需要封装获取content Uri的工具类

publicstaticurigetcontenturi (上下文上下文,文件文件) {

string file path=file.getabsolutepath (;

cursor cursor=context.get content resolver (

mediastore.images.media.external _ content _ uri,

new string [ ] { mediastore.images.media._ id },

MediaStore.Images.Media.DATA '=?' ,

new string [ ] {文件路径},null;

if(cursor!=null cursor.moveToFirst (

intid=cursor.getint(cursor

. getcolumn index (mediastore.media columns._ id );

uribaseuri=uri.parse (' content ://media/external/images/media );

返回uri.withappendedpath (base uri,' ' id );

} else {

if(file.exists () ) )。

contentvaluesvalues=new content values (;

values.put (mediastore.images.media.data,filePath );

返回上下文. get content resolver ()

mediastore.images.media.external _ content _ uri,values;

} else {

返回空值;

}

}

}

处理反馈结果

overridefunonactivityresult (请求代码: int,结果代码: int,数据: intent? () )。

super.onactivityresult (请求代码,结果代码,数据) )。

结果代码!=-1 ()

返回

}

when (请求代码) {

TAKE_PHOTO_REQ - {

//处理图像选择结果

mut photo file=file (get picpath (file.separator ' avatar _ ' system.current time millis ) ' jpeg ' ) ) )。

valcuturi=uri.from file (mcutphotofile ) )。

IF (数据!=空) {

startactivityforresult (intent utils.getimagecropintent (data.data,cutUri,200,200 ),CUT_PHOTO_REQ ) )。

} else {

val uri=uri utils.get content uri (应用程序上下文,mTakePhotoFile ) )。

startactivityforresult (intent utils.getimagecropintent (uri,cutUri,200,200 ),CUT_PHOTO_REQ )。

}

}

CUT_PHOTO_REQ - {

//处理图像裁剪结果

}

}

}

1.2.4安卓7.0兼容

1. res/xml/provider_paths.xml路径的自交换

2. manifests配置包名称由自己更换

.

Android : name=' Android.support.v4.content.file provider '

安卓: authorities=' com.example.sun moon.provider '

安卓: exported=' false '

Android : granturipermissions=' true '

Android : name=' Android.support.file _ provider _ paths '

Android : resource=' @ XML/provider _ paths ' /

.

.

总结

以上是编辑向大家介绍的安卓项目实战头像选择功能。 我希望对大家有帮助。 如果大家有什么疑问的话请给我留言。 编辑马上回复大家。 在此也感谢您对脚本房屋网站的支持!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。