Solution to the problem of null pointer when converting view to Bitmap on Android
When working on Android projects, there may be such a requirement to convert a View or layout file into a Bitmap object.
The methods are actually almost the same. But there are some small details that need to be paid attention to. I have used this function recently in the project. I will share it now. I hope it can help you meet the fruit.
The person with the problem.
First is the code for conversion:
/** * Convert View (Layout) to bitmap * @param view * @return */ public static Bitmap createBitmap(View view){ (true); /** * Please note here that when using (0, ) * When measuring the view, if your layout contains RelativeLayout, the API is 17 or below 17 will contain a null pointer exception * Solution: * 1 Do not include RelativeLayout in the layout * 2 Use (256, ) It seems to be OK * */ ((0, ), (0, )); (0, 0, (), ()); (); Bitmap bitmap = (); return bitmap; }
The above is the method of converting to Bitmap, but be careful, use it(0, )
When measuring the view, if your layout contains RelativeLayout API is 17 or below 17, it will contain a null pointer exception. Encountering this problem in the project
I don’t know what happened, but I found out later when I looked at the source code. Here is the official explanation of this method:
/** * Creates a measure specification based on the supplied size and mode. * * The mode must always be one of the following: * <ul> * <li>{@link #UNSPECIFIED}</li> * <li>{@link #EXACTLY}</li> * <li>{@link #AT_MOST}</li> * </ul> * * <p><strong>Note:</strong> On API level 17 and lower, makeMeasureSpec's * implementation was such that the order of arguments did not matter * and overflow in either value could impact the resulting MeasureSpec. * {@link } was affected by this bug. * Apps targeting API levels greater than 17 will get the fixed, more strict * behavior.</p> * * @param size the size of the measure specification * @param mode the mode of the measure specification * @return the measure specification based on size and mode */ public static int makeMeasureSpec(int size, int mode) { if (sUseBrokenMakeMeasureSpec) { return size + mode; } else { return (size & ~MODE_MASK) | (mode & MODE_MASK); } }
This bug was fixed in systems above API 17. Here are two solutions:
1. Do not include Relativelayout layout in the layout file
2. It seems to be OK with (256, )
The above is the solution to the problem of converting view to Bitmap to Android. If you have any questions, please leave a message or go to the community of this site to communicate and discuss. Thank you for your support for this site!