android - 如何捕获带有背景的SurfaceView的屏幕截图

标签 android android-layout

在我的应用程序中,我想捕获带有 SurfaceView 的屏幕,但我无法捕获用背景绘制的屏幕。如何保存与背景一起绘制的屏幕。请帮助我如何解决此问题。

         View content  = findViewById(R.id.relative21);
        content.setDrawingCacheEnabled(true);

        SurfaceHolder sfhTrack = drawingSurface.getHolder();
              sfhTrack.setFormat(PixelFormat.TRANSPARENT);

               private void getScreen() {
          // TODO Auto-generated method stub

             View content = findViewById(R.id.relative21);
                Bitmap bitmap = content.getDrawingCache();
            File myDir=new File("/sdcard/saved_images");
                myDir.mkdirs();
                Random generator = new Random();
                int n = 10000;
                n = generator.nextInt(n);
                String fname = "Image-"+ n +".png";
                File file = new File (myDir, fname);
                try 
                {

                    FileOutputStream ostream = new FileOutputStream(file);
                    bitmap.compress(CompressFormat.PNG, 100, ostream);
                    ostream.close();
                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
    }

我尝试了上面的代码,我可以保存背景,但无法保存绘制的背景。

最佳答案

   public static Bitmap overlay(Bitmap bmp1,Bitmap bmp2) {
        Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(),      bmp1.getConfig());
        Canvas canvas = new Canvas(bmOverlay);
        canvas.drawBitmap(bmp1, 0,0, null);

        canvas.drawBitmap(bmp2, 0, 0, null);
        Log.i("bmOverlay.......",""+bmOverlay);
        bmp3=bmOverlay;
        return bmOverlay;
    }

       private void getScreen() {
        Toast.makeText(BookType1.this, "saved", Toast.LENGTH_SHORT).show();
          File myDir=new File("/sdcard/saved_images");
            myDir.mkdirs();
            Random generator = new Random();
            int n = 10000;
            n = generator.nextInt(n);
            String fname = "Image-"+ n +".png";
            File file = new File (myDir, fname);


        try 
        {

            FileOutputStream ostream = new FileOutputStream(file);
            bmp3.compress(CompressFormat.PNG, 100, ostream);


            ostream.close();
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

通过重叠两个位图,我在一个位图中捕获了背景,在第二个位图中捕获了表面 View ,解决了这个问题,并且在这两个位图中重叠了我得到的解决方案。

关于android - 如何捕获带有背景的SurfaceView的屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11505093/

相关文章:

javascript - 在 Cordova/Phonegap 应用程序中实现 Stripe 支付网关

android - 当主题为Material3时,如何更改应用程序中所有小部件的文本颜色

android - 如何将 ListView 保持在 Frame Layout 底部

android - 如何设置布局到 Galaxy Nexus

android - 插入设备时如何使用 WorkManager 创建作业?

android - 将音频文件播放到调用android中

java - 添加嵌套 View 会动态卡住应用程序

android - 为标记 fragment 找到意外的命名空间前缀 "xmlns"

java - 自定义电话号码格式

android - ConstraintLayout 最大宽度百分比