android在本应用中d长截图,截长图

注:这个截图是截取自己应用的图,而不是系统那种(电源+音量减)截图功能(要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();


不好意思,以上都是伪代码,我凭记忆打出来的。

             


猜你喜欢

转载自blog.csdn.net/ccc905341846/article/details/51221850