注:这个截图是截取自己应用的图,而不是系统那种(电源+音量减)截图功能(要root或者5.1吧)
做一个应用的时候要一个截图分享功能,这个图片外面还要个花边,好吧,上个粟子(锤子便签长截图)
注意的是 :要截的图很长很长
方法一:View.getDrawableCache()获取Bitmap,ImageView.setImageBitmap(),花边就用ImageVew.setBackground()设置一个.9.png (关于.9.png可以自行百度)
结果:这个Cache的大小是有限制的,超过了bitmap是空。失败
方法二:
Bitmap bitmap=Bitmap.create(view.getWidth,view.getHeight, argb_8888)
Canvas canvas=new Canvas(bitmap);
view.draw(canvas);
画出来了,不过花边怎么办?
ImageView.setImageBitmap(),花边就用ImageVew.setBackground()设置一个.9.png?
不行的,imageView可以显示的分辨率是有限制的,太大会黑。而且就算图片不大,显示出来,难道还要再new Bitmap,再把imageview的内容显示进去?太不优雅了。不过还是试试吧。
关于ImageView不能显示太大解决方法:
1.关闭硬件加速(不想更改手机设置,所以就没试)
2.用ImageLoader (这个我试过,能显示全部,不过ImageView的width和height太小了,显示的bitmap是缩略图
3.分段显示Bitmap.(没试过)
失败了。。。
方法三:现在问题是画不了花边,实在没什么思路了。跑去看View源代码,因为view.setbackgroundResource可以完美拉伸.9.png。看到源代码中有一段:
Drawable d=getResource.getDrawable(resId);
d.draw(canvas)
原来是这样的,然后照着写,不过没显示,原来是还要设置区域、
d.setBounce(0,0,view.getWidth(),view.getHeight())
画出来了,然后
d.draw(canvas);
view.draw(canvas);
不过有一个问题:画的花边和内容重叠在一起了。
突然想到制作.9.png的时候:左上是拉伸,右下是内容显示区域。它是怎么实现的呢,然后一看drawable的方法,有一个drawable.getPandding,应该就是这个了。
代码
Drawable d=getResource.getDrawable(R.drawable.xx);
Rect r=new Rect();
d.getPandding(r);
Bitmap bmp=Bitmap.create(view.getWidth()+r.left+r.right,view.getHeight()+r.top+r.bottom,argb_8888);
d.setBounce(0,0,bmp.getWidth(),bmp.getHeight);
Canvas canvas=new Canvas(bmp);
d.draw(canvas);
canvas.translate(r.left,r.top);
view.draw(canvas);
bmp.compress();
不好意思,以上都是伪代码,我凭记忆打出来的。