PhotoDealDemo
android图片编辑的一个demo,其实是一个可以使用的编辑框架。功能包括标记、文字、旋转、马赛克、裁剪和编辑撤销,可以不依赖so库,只使用原生接口实现功能。
优势:
1可以不依赖so库
2具有撤销功能,目前开源的几乎没有
使用说明
1、OOM,必须在前一个页面,加载完成图片以后,才能进行图片编辑界面,否则OOM
解决:新启动一个进程来处理图片,并且自定义一个imageloader,避免内存溢出
另外可以提高效率。新建线程调用init方法,可以避免阻塞主线程,但是在频繁进出编辑activity时会
造成空指针,解决方法可以将ondraw()方法里面的调用设为synchronized,但是这样又严重影响
绘制效率。
所以要么就不在子线程调用Init方法,但是这样也会对效率有一定影响。
最好就是在进程中执行,离开activity杀掉进程,释放内存,也不存在什么频繁进出的问题了。
如果你不希望启动新进程,最好不要在子线程调用init方法,并且在ondestory中调用recycle方法回收内存
2、png图无法正常处理,透明背景会变成不透明
解决:观察了一下,手Q也是这样的,目前没有更好的解决办法,除非使用native即时渲染马赛克,
这样会增加so,并且需要考虑即时渲染算法
3、注意gif图
GIF图编辑以后,变成png
4、在编辑界面,然后切回桌面,来回切换,编辑状态是否被保留(activity可能会被杀掉)(解决)
一般不会被杀
问题:
5、裁剪后,可能存在1、2个像素列的空白(解决)
解决:旋转后,需要重新计算缩放,以适应屏幕大小。在适应matrix进行缩放过程中,由于使用浮点数,因此计算出的结果不完全准确。
由于裁剪的是正方形,因此缩放后两边长度相同,根据这个来进行再次限制
6、软键盘弹出问题(解决)
软键盘弹出后,不能挤压布局,但是要讲输入框和数字提示框挤上去
解决:布局需求是这样的,底部工具栏,高度是固定的,剩余的高度给actionimageview
也就是说不同屏幕,actionimageview高度不同.
这样,我给actionimageview设置match_parent就可以了.
但是软键盘弹出的时候,会将actionimageview挤压,因为要求软键盘弹出时,输入框被顶上去,但是其他部分不被顶上去,也不变化.
对于底部工具栏,设置layout_below在actionimageview,软键盘弹出的时候,就会被软键盘遮住,从而看不出它被顶上去
对于actionimageview被压缩的问题,因为是match_parent,而不是一个确定高度,所有布局被软键盘挤压时,actionimageview大小会变化,
因此,需要在布局完成后,计算当前actionimageview的高度,将这个高度设置给actionimageview,取代match_parent