Frage Einen Teil der Aktivität / Fragment als Bild speichern


Ich versuche, einen Teil meiner Aktivität ohne Toolbar und Statusleiste zu speichern. Der Code, den ich gerade habe, speichert den ganzen Bildschirm. Bitte beachten Sie das Bild unten.

enter image description here

Code, den ich gerade habe:

   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);
    }

Das Bild, das gespeichert wird ..

enter image description here

Wie kann ich nur den Teil retten, den ich vom Fragment benötige?


5
2017-09-25 09:46


Ursprung


Antworten:


Verwenden Sie die Funktion unten, um eine Ansicht in die Bilddatei zu speichern. Wenn Sie speichern müssen Fragment, rufen Sie unten Funktion im Fragment auf.

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;
    }

6
2017-09-25 10:10



Benutze das

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

Sie können jetzt das speichern saveBm als Datei


1
2017-09-25 09:53



Sie müssen eine separate Ansicht erstellen, um dieses als Bild zu speichern, und dann können Sie einen Screenshot dieser Ansicht wie folgt auswählen:

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();
}

und nicht vergessen hinzuzufügen permission im manifest

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

1
2017-09-25 09:57