Существует ли максимальный размер растрового изображения при использовании getDrawingCache?

Я пытаюсь создать растровое изображение текста вTextView, В прошлом я делал это, используяgetDrawingCache, Тем не менее, теперь у меня есть необходимость создать растровое изображениеTextView с гораздо более длинным текстом, чем раньше. Это вызываетgetDrawingCache бросить исключение NullPointerException.

Хотя я говорю «гораздо более длинный текст», я не говорю о неоправданно длинном. Если я создаю TextView шириной 600 пикселей и размером 24 шрифта, я получаю исключение из 53 строк текста (но не из 52 строк). Есть ли обходной путь для этого?

Сначала я подумалэтот ответ, в котором макет рисует себя наcanvasбыло решение. Однако, это не сработало для меня, потому что я создаю TextView программно иширина и высота 0 прежде чем они будут изложены. Я никогда не делаю макетTextView на экране.

Код для справки
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;
}
Исключение нулевого указателя
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)
        ...
Заметка

Это не IllegalArgumentException или OutOfMemoryError (По крайней мере, внешне, хотя, возможно, это и есть внутренняя причина.)

Таинственная трассировка стека в консоли разработчика Android (размер растрового изображения превышает 32 бита)Проблема с нехваткой памяти при загрузке изображения в растровый объект

Ответы на вопрос(1)

Ваш ответ на вопрос