2016-04-20 10 views
0

Ich möchte ein Bild von einer Ansicht in Aktivität machen und dieses Bild teilen. Zuerst Ich benutze diese Methode:Wie nehme ich eine Bildschirmvorschau auf Android?

private Bitmap getShareViewShot() { 
    this.setDrawingCacheEnabled(true); 
    this.buildDrawingCache(); 
    Bitmap bitmap = Bitmap.createBitmap(this.getDrawingCache(), 0, mSharePageRoot.getTop(), this.getWidth(), mSharePageRoot.getBottom()); 
    this.setDrawingCacheEnabled(false); 
    return bitmap; 
} 

Aber wenn die Ansicht in einem Scrollview ist und die Aussicht ist außerhalb des Bildschirms gescrollt, kann dieses Verfahren nicht ein ganzes Bild von dieser Ansicht bekommen.

Also habe ich diese Methode ändern unten an:

private Bitmap getShareViewShot() { 
    Bitmap bitmap = Bitmap.createBitmap(mSharePageRoot.getWidth(), mSharePageRoot.getHeight(), 
      Bitmap.Config.ARGB_8888); 
    mSharePageRoot.layout(0, 0, mSharePageRoot.getLayoutParams().width, mSharePageRoot.getLayoutParams().height); 
    final Canvas canvas = new Canvas(bitmap); 
    mSharePageRoot.draw(canvas); 
    return bitmap;  
} 

Aber eine andere Frage kommt: diese Ansicht nicht backgroud hat, so dass das Bild, das ich hat bekommen einen schwarzen backgroud.In meinen Code, haben die Aktivität ein Netzwerk-Image Wie der Hintergrund, so bedeutet dies, dass diese Methode nicht den Hintergrund der Aktivität erhalten kann.

Bitte verzeih mir mein schlechtes Englisch. Gibt es eine andere Methode? Vielen Dank.

+0

https://stackoverflow.com/questions/2661536/how-to-programmatically-take-a-screenshot-in -android? rq = 1 –

+0

möglich duplicate von http://stackoverflow.com/questions/2661536/how-to-programmatically-take-a-screenshot-in-android –

Antwort

0

Sie können Hintergrund von Leinwand, wie diese zeichnen:

private Bitmap getShareViewShot() { 
    Bitmap bitmap = Bitmap.createBitmap(mSharePageRoot.getWidth(), mSharePageRoot.getHeight(), 
     Bitmap.Config.ARGB_8888); 
    mSharePageRoot.layout(0, 0, mSharePageRoot.getLayoutParams().width, mSharePageRoot.getLayoutParams().height); 
    final Canvas canvas = new Canvas(bitmap); 
    // the bitmap will have a white background 
    canvas.drawColor(0xffffffff); 
    mSharePageRoot.draw(canvas); 
    return bitmap;  
} 
+0

Das backgroud ist ein Netzwerkbild, wenn es gezeichnet wird, es kann nicht geladen werden. Aber ich kann nur auf diese Weise verwenden, listen Sie Downloadende ab und benutzen Sie das backgroud Bild, um zu zeichnen. Vielen Dank. –