Gibt es eine maximale Bitmap-Größe bei Verwendung von getDrawingCache?

Ich versuche, eine Bitmap des Texts in einem @ zu erstelleTextView. In der Vergangenheit habe ich dies mit @ gemacgetDrawingCache. Jetzt muss ich jedoch eine Bitmap eines @ erstelleTextView mit viel längerem Text als zuvor. Dies verursachtgetDrawingCache, um eine NullPointerException auszulösen.

Obwohl ich "viel längeren Text" sage, spreche ich nicht über unangemessen lange. Wenn ich eine Textansicht mit einer Breite von 600 Pixel und einer Schriftgröße von 24 erstelle, wird die Ausnahme bei 53 Textzeilen (nicht jedoch bei 52 Zeilen) angezeigt. Gibt es eine Problemumgehung dafür?

uerst dachte ichdiese Antwort, in dem sich das Layout auf ein @ stütcanvas, war die Lösung. Das hat jedoch bei mir nicht funktioniert, da ich die TextView programmgesteuert erstelle unddie Breite und Höhe sind 0 bevor sie ausgelegt werden. Ich gestalte mein @ nie wirkliTextView auf dem Bildschirm

Code als Referenz
private Bitmap getBitmap(Context context){

    final int NUMBER_OF_LINES = 53; // 53 crashes, 52 doesn't
    final int width = 600; // width of TextView in pixels
    final int fontSize = 24;

    // create string with NUMBER_OF_LINES
    StringBuilder testString = new StringBuilder();
    for (int i = 0; i < NUMBER_OF_LINES; i++) {
        testString.append("\n");
    }

    // Create TextView
    TextView tvText = new TextView(context);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    tvText.setTextSize(fontSize);
    tvText.setWidth(width);
    tvText.setLayoutParams(params);
    tvText.setBackgroundColor(Color.WHITE); // even setting the background color affects crashing or not
    tvText.setText(testString);

    // Create bitmap
    tvText.setDrawingCacheEnabled(true);
    tvText.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    tvText.layout(0, 0, tvText.getMeasuredWidth(), tvText.getMeasuredHeight());
    tvText.buildDrawingCache(true);
    Bitmap bitmap = Bitmap.createBitmap(tvText.getDrawingCache()); // crashes here
    tvText.setDrawingCacheEnabled(false);

    // This also didn't work because width and height are 0
    /*Bitmap bitmap = Bitmap.createBitmap(tvText.getWidth(), tvText.getHeight(),
            Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    tvText.draw(canvas);*/

    return bitmap;
}
NullPointerException
06-21 14:20:24.628    8036-8036/com.example.testsomecode E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testsomecode/com.example.testsomecode.MainActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
        ...
 Caused by: java.lang.NullPointerException
        at android.graphics.Bitmap.createBitmap(Bitmap.java:494)
        at com.example.testsomecode.MainActivity.getBitmap(MainActivity.java:57) // -> Bitmap bitmap = Bitmap.createBitmap(tvText.getDrawingCache());
        at com.example.testsomecode.MainActivity.onCreate(MainActivity.java:25)
        ...
Hinwei

Dies ist keine IllegalArgumentException oder OutOfMemoryError (Zumindest nicht extern, obwohl dies möglicherweise der interne Grund ist.)

Mysterious Stacktrace in der Android-Entwicklerkonsole (Bitmap-Größe übersteigt 32 Bit)Strange out of memory issue beim Laden eines Bildes in ein Bitmap-Objekt

Antworten auf die Frage(2)

Ihre Antwort auf die Frage