Android照片处理——涂鸦和拼图实现
先看效果图:
技术回顾:这个里面的涂鸦是网上的一个相关帖子,我只修改了里面的涂鸦界面背景,增加了拍照获取和裁剪照片等,主要实现的是拼图,拼图首先要获取系统的相册并展示出来,用BaseAdapter从SD卡中读取相册列表显示出来,当然在这之前得调用MediaStore系统类,使用MediaStore.Images.Media.EXTERNAL_CONTENT_URI取得所有照片的信息,返回照片的路径、大小和最后修改时间以及直接包含图片的文件夹也就是相册名字,把每个相册中的第一张照片设置为展示列表中要显示的。调用BitmapFactory.Options根据指定的图像路径和大小来获取缩略图,这样有两点好处: 1.使用较小的内存空间,第一次获取的bitmap实际上为null,只是为了读取宽度和高度,第二次读取的bitmap是根据比例压缩过的图像,第三次读取的bitmap是所要的缩略图。2、缩略图对于原图像来讲没有拉伸,不会出现失真现象。之后在gridview中显示相册里的缩略图,并创建一个数组imageChose来存放选择好的照片,当选择gridview中的照片时把选中的照片放入,调用notifyDataSetChanged()更新下面已选中照片,当点击下面已选中时就是把imageChose中的相关照片从里面remove掉。也就是说这个数组里面一直保存着当前选中的照片,便于下面拼图操作的传值。
在拼图界面,创建一个400*660大小的画布,在布局文件中设置一个relativelayout布局,目的是把这个画布的view给add进去,便于截图保存。在对应的三四五张照片的时候先计算好每一块所占画布的大小。起初我是把照片按预定的大小来进行createSclaBitmap压缩,但是这个针对正方形不会失真,要是长方形就会失真,解决的办法是把照片先统一压缩为固定尺寸400*400大小的,在裁剪相应大小填进拼图区域里,可是裁剪的部分并不一定是我们想要的,我们要是想移动照片在框里面的位置,不可能!最后把画布按模版样式裁剪为几个部分,这样照片还采用正方形只不过一直按照裁剪区域的最大边来压缩,这样照片不会失真,而且可以移动,当然移动的时候得设置好坐标,在对应的区域相应的图片移动,对其他图片互不影响,在这次裁剪后填充图片时必须调用Canvas类的save()和restore()方法来保存Canvas的状态和恢复他的状态,不然就永远只能绘制一张图。
心得:通过这个拼图的设计,我更进一步体会到Android中的Canvas类和Paint类以及Bitmap类的用法,并且学会了canvas类中的save和restore、clipRect、drawBitmap等相关函数的用法,同时学会了Bitmap中的三种缩放照片的方法,在统统试了一遍之后也知道了他们的区别。同时学会了分享功能和保存照片的写法。而且在界面设计排版中也有了提高,并且对Android中的View和它上面的监听事件有了进一步的掌握,在重绘界面时用了postInvalidate();通过它我还学习了invalidate,明白了后者在UI线程中使用,前者在非UI线程中使用,总之这个项目我收获颇多。
Android照片处理——涂鸦和拼图实现相关推荐
- 拼图java监听器,Android 简单的实现滑块拼图验证码功能
实现滑块拼图验证码功能之前已经写过一篇了,上一篇使用的是自定义控件的方式实现这个功能,主要还是想让童鞋们知其然更知其所以然,还没看的童鞋可以先看看Android实现滑块拼图验证码功能这篇. 在项目的开 ...
- android 图片存取方法,6种备份Android照片的方法
第2部分:Android数据备份和还原 保护Android设备中任何人的照片的另一个常用想法是在dr.fone - Android数据备份和恢复软件的帮助下将照片从手机传输到PC .它是一个在数据传输 ...
- android 照片特效,Android使用Gallery实现照片拖动的特效
今天要分享一个非常简单的功能: 使用Android原生控件Gallery实现照片拖动的特效 实现思路如下: 在布局文件中定义一个Gallery控件 由于要显示多张图,为了方便,我直接引用了Androi ...
- TakePhoto-轻量级Android照片处理框架
TakePhotoV2.0已发布,详见<TakePhoto-轻量级Android照片处理框架V2.0发布> TakePhoto 简介 支持以拍照的方式获取照片 支持从相册选择照片 支持对照 ...
- Android 照片压缩
今天给大家带来的是Android照片压缩 首先在xml里建个button(拍照)和一个fill的imageview 用来展示压缩好的图片 拍照的onclicklistener点击事件 Intent i ...
- c语言拼图验证码编写,Android 简单的实现滑块拼图验证码功能
实现滑块拼图验证码功能之前已经写过一篇了,上一篇使用的是自定义控件的方式实现这个功能,主要还是想让童鞋们知其然更知其所以然,还没看的童鞋可以先看看Android实现滑块拼图验证码功能这篇. 在项目的开 ...
- Android 照片涂鸦4-5
设计布局文件 activiy_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearL ...
- android照片编辑软件,照片编辑免费软件下载-照片编辑软件app下载 v7.45最新版_5577安卓网...
照片编辑免费软件app下载,提供给你全新的图片处理工具,这是软件包含了丰富的功能内容,软件一键即可轻松对各种照片組合.编辑和拼貼,那么有需要图片处理的用户下载该app使用吧! [软件特色] [ 拼图编 ...
- android 照片拼接长图_手机照片拼接长图软件|照片拼接长图app下载v2.0-乐游网软件下载...
<照片拼接长图app>是一款功能非常强大的微信照片拼接长图工具.名叫<照片拼贴>,能够直接为用户提供微信图片,QQ图片以及手机中的各种照片拼接和编辑的功能,让你随时随地拼图片, ...
- Android手绘涂鸦PaintView
推荐一款很好用的涂鸦自定义控件PaintView https://github.com/duoduoyoumaicai/PaintView PaintView 一个很好用的绘图板 可以绘制曲线.橡皮擦 ...
最新文章
- 第一个spring boot应用
- qt 启动画面显示图片_Qt程序起动画面QSplashScreen
- 欠122亿乐视能不能“真还”?数据拆解乐视债务账单
- [家里蹲大学数学杂志]第418期南开大学2013年实变函数期末考试试题参考解答
- spin_lock amp; mutex_lock的差别?
- 大一软件工程C语言推荐书籍,大一软件工程学生,看完了谭浩强的书,越看越迷茫,感觉并没什么用,什么大程序都不会编,求指点?...
- protect 继承_【private,public,protect三种继承方式的区别】
- 路由器登陆192.168.1.1打开后出现移动登陆页面
- 简单echars Demo
- 做最好的自己 -- 读后摘录
- 【Unity】Obi插件系列(五)—— 约束
- linux怎么发送邮件到qq邮箱,centos7命令行下用QQ邮箱发送邮件教程
- Entity Framework优缺点及使用方法总结
- “核高基”专项与永中软件的大事记
- au回声_回声按钮如何将Amazon Alexa技能提升到新水平
- 计算机大学生个人发展与规划,大学生个人发展规划
- 深入理解指针:一文让你彻底理解指针
- 华为折叠手机是鸿蒙系统吗,华为MateX折叠屏5G手机即将面世,你们期待鸿蒙系统吗?...
- 工科研究生常用的网站
- html加载m3u8