Is there a maximum bitmap size when using getDrawingCache?

后端 未结 1 1439
天命终不由人
天命终不由人 2021-01-15 01:10

I\'m trying to create a bitmap of the text in a TextView. In the past I have done this using getDrawingCache. However, now I have a need to create

相关标签:
1条回答
  • 2021-01-15 02:02

    You can drop the buildDrawingCache method and just use canvas. Since you are building the view programmatically you also need to call measure() and layout() before you can get a bitmap.

    The key lines are:

        tvText.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        tvText.layout(0, 0, tvText.getMeasuredWidth(), tvText.getMeasuredHeight());
        Bitmap bitmap = Bitmap.createBitmap(tvText.getWidth(), tvText.getHeight(),
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        tvText.draw(canvas);
    

    Here is the full example:

    private Bitmap getBitmap(Context context){
    
        final int NUMBER_OF_LINES = 153;
        final int width = 600;
        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);
        tvText.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        tvText.layout(0, 0, tvText.getMeasuredWidth(), tvText.getMeasuredHeight());
    
    
        // Create the bitmap from the view
        Bitmap bitmap = Bitmap.createBitmap(tvText.getWidth(), tvText.getHeight(),
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        tvText.draw(canvas);
    
        return bitmap;
    }
    
    0 讨论(0)
提交回复
热议问题