Android聊天室背景,安卓实现类似QQ刚换聊天背景的功能

news/2024/11/30 7:39:34/

自己实现了一下,但对于一些手机一设置背景就出现闪退不知道为什么,大体思路就是获得用户选择的uri,然后如果屏幕分辨率小于图片的分辨率就对图片进行下处理,防止OOM。但现在不知道哪里还有问题

启动系统的图片选择

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("image/*");

CourseFragment.getInstannce().startActivityForResult(intent,1);

里边有检查权限,安卓6.0权限得经用户同意读内存,还有就是我把图片以字符串的形式保存下来了,使得下次启动直接显示保存的图片(不知道有没有更好的方法,感觉这个方法很不正规)。

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if(requestCode==1&&resultCode==RESULT_OK&&data!=null) {

Uri uri = data.getData();

int weight= CourseBackground.getHeight();

int height=CourseBackground.getWidth();

Bitmap photo=getSmallBitmap(getRealPathFromURI(uri),weight,height);

if(photo==null)

{

OwnToast.Long("请检查存储权限是否开启");

return;

}

BitmapDrawable bd=new BitmapDrawable(getResources(),photo);

if(bd==null)

{

OwnToast.Long("请检查存储权限是否开启");

return;

}

ByteArrayOutputStream stream = new ByteArrayOutputStream();

photo.compress(Bitmap.CompressFormat.JPEG, 60, stream);

byte[] b = stream.toByteArray();

// 将图片流以字符串形式存储下来

String tp = new String(Base64Encoder.encode(b));

InformationShared.setString("course_background", tp);

CourseBackground.setBackground(bd);

}

}

根据URI去返回真实路径,网上找的代码,似乎这里有问题,在错误统计里看到这里的报错

private String getRealPathFromURI(Uri contentURI) {

String result;

Cursor cursor = getActivity().getContentResolver().query(contentURI, null, null, null, null);

if (cursor == null) {

// Source is Dropbox or other similar local file path

result = contentURI.getPath();

} else {

cursor.moveToFirst();

int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);

result = cursor.getString(idx);

cursor.close();

}

return result;

}

1273 return result那一行

org.pointstone.cugapp.fragments.CourseFragment.getRealPathFromURI(CourseFragment.java:1273)

然后是得到压缩的图片函数

public Bitmap getSmallBitmap(String filepath,

int reqWidth, int reqHeight) {

// 第一次解析将inJustDecodeBounds设置为true,来获取图片大小

final BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;

BitmapFactory.decodeFile(filepath,options);

// 调用上面定义的方法计算inSampleSize值

options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

// 使用获取到的inSampleSize值再次解析图片

options.inJustDecodeBounds = false;

return BitmapFactory.decodeFile(filepath, options);

}

private String getRealPathFromURI(Uri contentURI) {

String result;

Cursor cursor = getActivity().getContentResolver().query(contentURI, null, null, null, null);

if (cursor == null) {

// Source is Dropbox or other similar local file path

result = contentURI.getPath();

} else {

cursor.moveToFirst();

int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);

result = cursor.getString(idx);

cursor.close();

}

return result;

}

不知道哪里有问题,请大家帮忙看看,有什么建议告诉我,就是一个LinearLayout然后调用setBackground设置背景图。感觉QQ的那个很棒,如果有相关的开源项目感谢推荐。


http://www.ppmy.cn/news/773974.html

相关文章

APP - 一个设置,让微信聊天背景清晰10倍

大家有没有发现: 不管多么高清的大图, 在设置成为微信聊天背景图后 都变得有点糊??? 作为眼前容不下糊图的强迫症患者, 打工妹决不允许 我的小姐姐 变得模糊! 其实会这样是因为 微信默认对图片…

仅仅有人物没背景的图片怎么弄_设置微信聊天背景里怎么就一张白色的,没有可供下载的背景图...

在新版的微信中,不仅仅是设置一个通用的聊天背景,还可以为每一个不同的聊天人设置不同的背景,怎样设置聊天背景呢,见下文。 为不同的聊天对象设置不同的背景 1、这是新版本微信的功能,对于旧版本请更新到新版本的微信。…

java 分库分表的中间件

在Java领域,有几个常用的中间件可以用于实现数据库的分库分表: 1. ShardingSphere: - ShardingSphere是一个开源的分布式数据库中间件,提供了完整的分库分表解决方案。 - 它支持水平分库分表、读写分离、分布式事务等功能。…

cad的三维多段线怎么批量转成多段线

没有cass的话,需要先安装cass。 地物编辑-复合线处理-3D转2D-输入(2),OK。

CAD合并命令

是使打断对象,或者相似对象合并为一个对象。 可以使用圆弧和椭圆弧创建完整圆和椭圆。 合并对象包括:圆弧、椭圆弧、直线、多段线和样条曲线。 1.单击编辑工具栏“合并命令”按钮。 2.在命令行中输入Join,按回车键。

如何快速分解CAD图纸中多个合并的CAD图形?

若是CAD图纸文件中多个图形合并成一个整体了,那么也无法对其中的某个图形细节进行编辑修改。出现这个问题,CAD图纸可以打开查看,但是仍然无法进行修改编辑,该如何快速分解CAD图纸中多个合并的CAD图形? 我们启动CAD编辑…

cad多段线画圆弧方向_cad怎么把多段线变成弧线

cad怎么把多段线变成弧线 1.cad多段线怎么画弧线 利用CAD多段线画弧线有如下几个步骤: 1、首先我们打开CAD软件,在当前绘图区通过PL命令进行绘制一条多段线,为的是为下面的步骤生成必要的节点。 2、通过输入命令后指定第一点我们来看命令行的…

CAD多段线无法合并的问题

最近在学习CAD绘图,刚搞完基础课程。看到一个CAD画小猪佩奇的案例,试着去画了一下。 感觉问题不大,但是在样条线合并成一条线上遇到了麻烦。最终搞清楚了,写下来方便将来忘掉。 首先不论是直线还是多段线都是可以直接合并的。 直…