先看效果图:

技术回顾:这个里面的涂鸦是网上的一个相关帖子,我只修改了里面的涂鸦界面背景,增加了拍照获取和裁剪照片等,主要实现的是拼图,拼图首先要获取系统的相册并展示出来,用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照片处理——涂鸦和拼图实现相关推荐

  1. 拼图java监听器,Android 简单的实现滑块拼图验证码功能

    实现滑块拼图验证码功能之前已经写过一篇了,上一篇使用的是自定义控件的方式实现这个功能,主要还是想让童鞋们知其然更知其所以然,还没看的童鞋可以先看看Android实现滑块拼图验证码功能这篇. 在项目的开 ...

  2. android 图片存取方法,6种备份Android照片的方法

    第2部分:Android数据备份和还原 保护Android设备中任何人的照片的另一个常用想法是在dr.fone - Android数据备份和恢复软件的帮助下将照片从手机传输到PC .它是一个在数据传输 ...

  3. android 照片特效,Android使用Gallery实现照片拖动的特效

    今天要分享一个非常简单的功能: 使用Android原生控件Gallery实现照片拖动的特效 实现思路如下: 在布局文件中定义一个Gallery控件 由于要显示多张图,为了方便,我直接引用了Androi ...

  4. TakePhoto-轻量级Android照片处理框架

    TakePhotoV2.0已发布,详见<TakePhoto-轻量级Android照片处理框架V2.0发布> TakePhoto 简介 支持以拍照的方式获取照片 支持从相册选择照片 支持对照 ...

  5. Android 照片压缩

    今天给大家带来的是Android照片压缩 首先在xml里建个button(拍照)和一个fill的imageview 用来展示压缩好的图片 拍照的onclicklistener点击事件 Intent i ...

  6. c语言拼图验证码编写,Android 简单的实现滑块拼图验证码功能

    实现滑块拼图验证码功能之前已经写过一篇了,上一篇使用的是自定义控件的方式实现这个功能,主要还是想让童鞋们知其然更知其所以然,还没看的童鞋可以先看看Android实现滑块拼图验证码功能这篇. 在项目的开 ...

  7. Android 照片涂鸦4-5

    设计布局文件 activiy_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  8. android照片编辑软件,照片编辑免费软件下载-照片编辑软件app下载 v7.45最新版_5577安卓网...

    照片编辑免费软件app下载,提供给你全新的图片处理工具,这是软件包含了丰富的功能内容,软件一键即可轻松对各种照片組合.编辑和拼貼,那么有需要图片处理的用户下载该app使用吧! [软件特色] [ 拼图编 ...

  9. android 照片拼接长图_手机照片拼接长图软件|照片拼接长图app下载v2.0-乐游网软件下载...

    <照片拼接长图app>是一款功能非常强大的微信照片拼接长图工具.名叫<照片拼贴>,能够直接为用户提供微信图片,QQ图片以及手机中的各种照片拼接和编辑的功能,让你随时随地拼图片, ...

  10. Android手绘涂鸦PaintView

    推荐一款很好用的涂鸦自定义控件PaintView https://github.com/duoduoyoumaicai/PaintView PaintView 一个很好用的绘图板 可以绘制曲线.橡皮擦 ...

最新文章

  1. 第一个spring boot应用
  2. qt 启动画面显示图片_Qt程序起动画面QSplashScreen
  3. 欠122亿乐视能不能“真还”?数据拆解乐视债务账单
  4. [家里蹲大学数学杂志]第418期南开大学2013年实变函数期末考试试题参考解答
  5. spin_lock amp; mutex_lock的差别?
  6. 大一软件工程C语言推荐书籍,大一软件工程学生,看完了谭浩强的书,越看越迷茫,感觉并没什么用,什么大程序都不会编,求指点?...
  7. protect 继承_【private,public,protect三种继承方式的区别】
  8. 路由器登陆192.168.1.1打开后出现移动登陆页面
  9. 简单echars Demo
  10. 做最好的自己 -- 读后摘录
  11. 【Unity】Obi插件系列(五)—— 约束
  12. linux怎么发送邮件到qq邮箱,centos7命令行下用QQ邮箱发送邮件教程
  13. Entity Framework优缺点及使用方法总结
  14. “核高基”专项与永中软件的大事记
  15. au回声_回声按钮如何将Amazon Alexa技能提升到新水平
  16. 计算机大学生个人发展与规划,大学生个人发展规划
  17. 深入理解指针:一文让你彻底理解指针
  18. 华为折叠手机是鸿蒙系统吗,华为MateX折叠屏5G手机即将面世,你们期待鸿蒙系统吗?...
  19. 工科研究生常用的网站
  20. html加载m3u8

热门文章

  1. 我37岁,从互联网大厂跳槽到国企后,发现没有一劳永逸的工作。。。
  2. 关于区块链安全方面的文献
  3. 百度网盘微信小程序文件 同步到百度网盘APP或客户端
  4. JS Worker执行多线程
  5. 怎么查看邮件服务器25端口,如何避免邮件服务器25端口被攻击
  6. 最大公约数用c语言表达,c语言求最大公约数(用c语言编写求最大公约数)
  7. matlab识别中国象棋棋盘,c – 使用OpenCV在棋盘中检测中国象棋棋子
  8. DNS错误不能上网怎么办?电脑dns错误修复方法?
  9. BM3D算法相关笔记
  10. Python数据解析笔记+实战