将活动/片段的一部分保存为图像

时间:2015-09-25 09:46:41

标签: android android-fragments screenshot

我正在尝试保存部分活动,没有工具栏和状态栏。我现在拥有的代码可以保存整个屏幕。请参考下图。

enter image description here

我现在的代码:

   llIDCardRootView = (LinearLayout) view.findViewById(R.id.ll_id_card_root_view);
        llIDCardContainer = (LinearLayout) llIDCardRootView.findViewById(R.id.ll_id_card_view);

private void createBitmap() {

        Log.d(Const.DEBUG, "Creating Bitmap");

        Bitmap bmp;
        //View v = llIDCardContainer.getRootView();
        //View v = activity.getWindow().getDecorView().findViewById(android.R.id.content);
        //View v = activity.findViewById(R.id.ll_id_card_root_view);
        ViewGroup v = (ViewGroup) ((ViewGroup) activity
                .findViewById(android.R.id.content)).getChildAt(0);

        v.setDrawingCacheEnabled(true);
//        v.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
//                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
//        v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
//        v.buildDrawingCache(true);

        bmp = Bitmap.createBitmap(v.getDrawingCache());

        File directory = new File(Environment.getExternalStorageDirectory()
                + File.separator);
        File file = new File(directory, FILE_NAME);

        try {
            FileOutputStream out = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();

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

        v.destroyDrawingCache();
        v.setDrawingCacheEnabled(false);
    }

正在保存的图片..

enter image description here

如何从片段中保存我需要的部分?

3 个答案:

答案 0 :(得分:7)

使用下面的功能将任何视图保存到图像文件。如果您需要保存在Fragment,请在片段中调用以下函数。

public static Bitmap getBitmapFromView(View view) {
        //Define a bitmap with the same size as the view
        Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
        //Bind a canvas to it
        Canvas canvas = new Canvas(returnedBitmap);
        //Get the view's background
        Drawable bgDrawable =view.getBackground();
        if (bgDrawable!=null) 
            //has background drawable, then draw it on the canvas
            bgDrawable.draw(canvas);
        else 
            //does not have background drawable, then draw white background on the canvas
            canvas.drawColor(Color.WHITE);
        // draw the view on the canvas
        view.draw(canvas);
        //return the bitmap
        return returnedBitmap;
    }

答案 1 :(得分:1)

使用此

container_layout.setDrawingCacheEnabled(true);
container_layout.buildDrawingCache(true);
Bitmap saveBm = Bitmap.createBitmap(container_layout.getDrawingCache());
container_layout.setDrawingCacheEnabled(false);

您现在可以将saveBm保存为文件

答案 2 :(得分:1)

你必须制作一个单独的视图,将其另存为图像,然后你可以选择该视图的截图:

LinearLayout content = findViewById(R.id.rlid);
content.setDrawingCacheEnabled(true);
Bitmap bitmap = content.getDrawingCache();
File file,f;                    
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
    {  
         file =new File(android.os.Environment.getExternalStorageDirectory(),"TTImages_cache");
         if(!file.exists())
        {
          file.mkdirs();

         } 
         f = new File(file.getAbsolutePath()+file.seperator+ "filename"+".png");
    }
  FileOutputStream ostream = new FileOutputStream(f);                                   
  bitmap.compress(CompressFormat.PNG, 10, ostream);
  ostream.close();

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

不要忘记在permission

中添加manifest
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />