2016-04-03 19 views
0

Ich arbeite an einem Projekt, das Zeichnen macht.Xamarin Android nehmen Screenshot

Ich benutze axml nicht, weil ich meine Zeichnung in einer Klasse namens filledpolygon mache und die Funktion in MainActivity aufruft. Ich möchte nur einen Screenshot in meinem Projekt machen. Gibt es eine Grundfunktion, die ich in der Methode onCreate aufrufen kann? Wenn das Programm ausgeführt wird, wird automatisch der Screenshot erstellt. Ich habe Antworten gefunden, außer der Xamarin-Plattform.

+1

Mögliches Duplikat von [Wie in Android um einen Screenshot aufzunehmen programmatisch?] (Http://stackoverflow.com/questions/2661536/how-to-programmatically-take-a-screenshot-in-android) –

Antwort

0

In Ihrer View können Sie den folgenden Code ausführen, der einen Screenshot erstellt. Ich habe nicht versucht, es in OnCreate() vor, so dass Sie möglicherweise testen müssen, um sicherzustellen, dass die Ansicht vollständig gerendert wurde.

* Bearbeiten: Nach this post können Sie Probleme haben, diesen Code in OnCreate() zu laufen, so dass Sie einen besseren Ort finden müssen. Ich konnte nicht herausfinden, auf welchen Post der Benutzer in dem von ihm geposteten Link Bezug genommen hatte.

* Edit # 2: gerade herausgefunden, dass Compress() nimmt nicht den Qualitätsparameter (die als 0 unten aufgeführt wird) in Betracht, da PNG verlustfrei ist, aber wenn Sie das Format JPEG zum Beispiel ändern, dann können Sie möchten um den Qualitätsparameter zu erhöhen, da Ihr Bild wie Müll aussieht.

public byte[] SaveImage() { 

    DrawingCacheEnabled = true;     //Enable cache for the next method below 
    Bitmap bitmap  = GetDrawingCache(true); //Gets the image from the cache 

    byte[] bitmapData; 
    using(MemoryStream stream = new MemoryStream()) { 
     bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream); 
     bitmapData = stream.ToArray(); 
    } 

    return bitmapData; 
} 
+0

@Aniki: Siehe bearbeiten und bitte als Antwort markieren, wenn es hilfreich war. – hvaughan3

+0

Ich bin neu bei Xamarin und Android im Allgemeinen, aber wie kann ich DrawingCacheEnabled true setzen? VS meldet mir, dass der Name 'DrawingCacheEnabled' im aktuellen Kontext nicht existiert. – Lexu

+0

@Lexu Sie müssten das von Ihrem Xamarin Android Projektcode tun. Siehe unten die Antwort von Amalan Dhananjayan, wo er 'view.DrawingCacheEnabled = true setzt;' – hvaughan3

0

Sie können diese Methode verwenden, die Ihnen ein Bitmap der ausgeführten Aktivität zurückgibt. Wenn Sie also von einer Aktivität aus sich selbst aufrufen, können Sie einfach "dies" als aktuelle Aktivität übergeben, um den Screenshot als Bitmap zu erhalten. Auch ich habe eine kleine Änderung hinzugefügt, um die Statusleiste aus dem Screenshot zu entfernen. Ich hoffe du hast es verstanden.

private Bitmap takeScreenShot(Activity activity) 
    { 
     View view = activity.Window.DecorView; 
     view.DrawingCacheEnabled = true; 
     view.BuildDrawingCache(); 
     Bitmap bitmap = view.DrawingCache; 
     Rect rect = new Rect(); 
     activity.Window.DecorView.GetWindowVisibleDisplayFrame(rect); 
     int statusBarHeight = rect.Top; 
     int width = activity.WindowManager.DefaultDisplay.Width; 
     int height = activity.WindowManager.DefaultDisplay.Height; 
     Bitmap screenShotBitmap = Bitmap.CreateBitmap(bitmap, 0, statusBarHeight, width, 
      height - statusBarHeight); 
     view.DestroyDrawingCache(); 
     return screenShotBitmap; 
    } 
Verwandte Themen