Log.e(“保存图片”, “图片保存失败”);
listener.onFilish(null);
}
} else {
if (fragment != null) {
Toast.makeText(fragment.getActivity(), “未找到存储卡,无法存储照片!”, Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(activity, “未找到存储卡,无法存储照片!”, Toast.LENGTH_SHORT).show();
}
listener.onFilish(null);
}
}
public static Bitmap drawDate2Bitmap(Bitmap bitmap) {
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm”, Locale.CHINA);
String date = sdf.format(new Date());
Bitmap.Config bitmapConfig = bitmap.getConfig();
// set default bitmap config if none
if (bitmapConfig == null) {
bitmapConfig = Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true); // 获取可改变的位图
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
// text color - #3D3D3D
paint.setColor(Color.RED);
// text size in pixels
paint.setTextSize(30);
// text shadow
// paint.setShadowLayer(1f, 0f, 1f, Color.WHITE);
Rect bounds = new Rect();
paint.getTextBounds(date, 0, date.length(), bounds);
int x = (bitmap.getWidth() - bounds.width());
canvas.drawText(date, x - 10, bitmap.getHeight() - 10, paint);
canvas.save();
return bitmap;
}
2.如果是从图库选择的照片,我们需要先获取照片拍摄日期,然后再将日期画上去,代码如下:
//从图库选择
private void fromGallery(Intent data, OnFilishedListener listener) {
Uri uri = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA , MediaStore.Images.Media.DATE_TAKEN};
Cursor cursor = null;
if (uri == null)
return;
if (uri.getScheme().contains(“file”)) {
Long fileTime = (new File(uri.getPath())).lastModified();
String dateTime = TimeUtil.longToDate1(fileTime);
Log.i(“wtt”,"照片拍摄日期为dateTime: " + dateTime);
saveSelectPic( dateTime , uri.getPath(), listener);
} else if (uri.getScheme().contains(“content”)) {
if (fragment != null) {
cursor = fragment.getActivity().getContentResolver()
.query(uri, filePathColumn, null, null, null);
} else {
cursor = activity.getContentResolver().
query(uri,filePathColumn, null, null, null);
}
if (cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
int dateIndex = cursor.getColumnIndexOrThrow(filePathColumn[1]);
String date = cursor.getString(dateIndex);
if (TextUtils.isEmpty(date)) {
date = TimeUtil.getStringDate1();
}else{
date = TimeUtil.longToDate1(Long.parseLong(date));
}
cursor.close();
saveSelectPic(date , picturePath, listener);
} else {
listener.onFilish(null);
}
}
}
/**
-
保存圖片
-
@param picPath
-
@param listener
*/
private void saveSelectPic(String date, String picPath, OnFilishedListener listener) {
if (TextUtils.isEmpty(picPath)) {
listener.onFilish(null);
return;
}
Bitmap bitmap = BitmapUtils.scaleBitmap(picPath);
bitmap = BitmapUtils.drawDate2Bitmap( date , bitmap);
try {
picPath = BitmapUtils.saveBitmap(bitmap);
listener.onFilish(picPath);
} catch (Exception e) {
e.printStackTrace();
Log.e(“保存图片”, “图片保存失败”);
listener.onFilish(null);
}
}
public static Bitmap drawDate2Bitmap(String date , Bitmap bitmap) {
Bitmap.Config bitmapConfig = bitmap.getConfig();
// set default bitmap config if none
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

文末
架构师不是天生的,是在项目中磨练起来的,所以,我们学了技术就需要结合项目进行实战训练,那么在Android里面最常用的架构无外乎 MVC,MVP,MVVM,但是这些思想如果和模块化,层次化,组件化混和在一起,那就不是一件那么简单的事了,我们需要一个真正身经百战的架构师才能讲解透彻其中蕴含的深理。
一线互联网Android面试题总结含详解(初级到高级专题)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
img-fKAbJKFo-1713111499242)]
[外链图片转存中…(img-USry3mWC-1713111499243)]
一线互联网Android面试题总结含详解(初级到高级专题)
[外链图片转存中…(img-j6W9eiWg-1713111499243)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!