SurfaceView截图方法Demo
SurfaceView 的截图方法说起来其实蛮有意思的。它是个专门用来搞高性能渲染的控件,像视频播放器、小游戏、动画场景,基本都能看到它的身影。因为它和 UI 线程是分开的,所以截图的时候用常规方法就不太行——你用View.draw()
根本截不到画面。
要搞定它的截图,思路其实还挺清晰的。第一步,就是利用SurfaceHolder.lockCanvas()
搞到一个Canvas
,在这个画布上把需要的内容画出来。画完之后别忘了用unlockCanvasAndPost(canvas)
提交,不然你画了也白画。
,如果你还想把SurfaceView
和其他普通View
合起来截图,那就要稍微麻烦点。其它View
直接用draw()
或者getDrawingCache()
拿个Bitmap
就行。接下来用Canvas.drawBitmap()
把两个Bitmap
合在一起就 OK,注意坐标对齐就好。
,合成的图要保存或者分享,也都不复杂。Bitmap.compress()
能把图压成JPEG
或PNG
保存到文件里;要分享,用Intent.ACTION_SEND
把图片Uri
丢进去,系统会弹出分享框。
顺带一提,这个示例就写得挺清楚的,有代码有,适合直接拿来练手。如果你平时在做游戏、视频类的 App,这一招肯定用得上。
65.14KB
文件大小:
评论区