2017-06-21 1 views
0

Vielen Dank im Voraus für Ihre Aufmerksamkeit.Wie kann ich einen einzelnen Teil meines Layouts Bildschirm drucken?

Ich brauche einen Druckbildschirm in nur einem Teil meines Layouts und nicht in allen. Zum Beispiel habe ich unten 2 cardViews, eine von ihnen ist nur eine zufällige cardview, ich möchte nur ein Bild der zweiten cardView, die den Text enthält "Ich möchte nur Bildschirm CardView Bildschirm drucken, nur es, und nicht alle anderen Objekte im Layout.

image Example here

Ich habe keine Ahnung, wie dies zu tun. Hat jemand jemals die gleiche Schwierigkeit gehabt oder weiß, wie ich es tun kann? Danke nochmal.

+0

Verwendung Caches Zeichnung - https://stackoverflow.com/questions/39466552/how-to-save-multiple-imageviews-as-one-bitmap-while-maintaining-position-of-each/39467067# 39467067 –

+0

Hallo! Ich werde es versuchen! Wenn ich mein Problem lösen kann, werde ich diesen Beitrag schließen. Danke für deine Hilfe! –

+0

@ JoãoArmando siehe meine Antwort Sie können jede Ansicht innerhalb dieser Funktion übergeben nicht nur cardview aber viele mehr wie relateLayout, LinearLayout, FrameLayout usw. Sie können auch den Vollbild Screenshot mit der gegebenen ID zu übergeordneten Layout erfassen. –

Antwort

2

Versuchen Sie dies.

CardView card = (CardView) findViewById(R.id.card); 

Jetzt übergeben Sie einfach die Karte zu captureScreenShot(). Es gibt die Bitmap zurück und speichert diese Bitmap saveImage().

Sie können jede Ansicht übergeben Wie RelativeLayout, LinearLayout usw. kann jede Ansicht an captureScreenShot() übergeben werden.

// Function which capture Screenshot 
public Bitmap captureScreenShot(View view) { 
    /* 
    * Creating a Bitmap of view with ARGB_4444. 
    * */ 
    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_4444); 
    Canvas canvas = new Canvas(bitmap); 
    Drawable backgroundDrawable = view.getBackground(); 

    if (backgroundDrawable != null) { 
     backgroundDrawable.draw(canvas); 
    } else { 
     canvas.drawColor(Color.parseColor("#80000000")); 
    } 
    view.draw(canvas); 
    return bitmap; 
} 

// Function which Save image. 
private void saveImage(Bitmap bitmap) { 
    File file = // Your Storage directory name + your filename 
    if (file == null) { 
     return; 
    } 
    try { 
     FileOutputStream fos = new FileOutputStream(file); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); 
     fos.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Schließlich rufen Sie diese Funktion wie folgt auf.

saveImage(captureScreenShot(card)); 
+1

Hi @AndyDeveloper, Das funktionierte perfekt für mich, und es war genau das, was ich brauchte. Vielen Dank für Ihre großartige Hilfe! –

+0

@ JoãoArmando willkommen :) –

1

get-ID Ihrer Karte Ansicht dann:

CardView view = (CardView)findViewById(R.id.card_view); 

view.setDrawingCacheEnabled(true); 

view.buildDrawingCache(); 

Bitmap bm = view.getDrawingCache(); 
Verwandte Themen