国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 將view 轉換為Bitmap出現空指針問題解決辦法

2019-10-22 18:31:21
字體:
來源:轉載
供稿:網友

Android 將view 轉換為Bitmap出現空指針問題解決辦法

在做Android 項目的時候,有時候可能有這樣的需求,將一個View 或者一個布局文件轉換成一個Bitmap  對象。

方法其實大都差不多。但這其中有一些小細節需要注意一下。最近在項目中用到了這個功能,現在分享一下,希望能幫助到遇到果這個

問題的人。

 首先是轉換 的代碼:

/**   * 將View(布局) 轉換為bitmap   * @param view   * @return   */  public static Bitmap createBitmap(View view){    view.setDrawingCacheEnabled(true);    /**     * 這里要注意,在用View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)     * 來測量view 的時候,(如果你的布局中包含有 RelativeLayout )API 為17 或者 低于17 會包空指針異常     * 解決方法:     * 1 布局中不要包含RelativeLayout     * 2 用 View.MeasureSpec.makeMeasureSpec(256, View.MeasureSpec.EXACTLY) 好像也可以     *     */    view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());    view.buildDrawingCache();    Bitmap bitmap = view.getDrawingCache();    return bitmap;  }

 上面就是轉換成Bitmap 的方法,但是要注意,在用View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)

          來測量view 的時候,(如果你的布局中包含有 RelativeLayout )API 為17 或者 低于17 會包空指針異常。在項目中遇到這個問題

死活不知道是怎么回事,后來在看源碼的時候才發現。以下是這個方法的官方解釋:

/**     * Creates a measure specification based on the supplied size and mode.     *     * The mode must always be one of the following:     * <ul>     * <li>{@link android.view.View.MeasureSpec#UNSPECIFIED}</li>     * <li>{@link android.view.View.MeasureSpec#EXACTLY}</li>     * <li>{@link android.view.View.MeasureSpec#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 android.widget.RelativeLayout} 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);      }    }

  在API 17 以上的系統中才修正了這個bug,這里有兩個解決方法:

 1 ,布局文件中不要包含Relativelayout 布局

 2,用 View.MeasureSpec.makeMeasureSpec(256, View.MeasureSpec.EXACTLY) 好像也可以

以上就是Android 將view 轉換為Bitmap出現空指針問題解決辦法,如有疑問請留言或者到本站社區交流討論,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宝应县| 即墨市| 喀喇| 梁平县| 大关县| 延川县| 芦溪县| 敦煌市| 科尔| 旺苍县| 深州市| 乐平市| 漳浦县| 福鼎市| 礼泉县| 斗六市| 迁安市| 潮州市| 太和县| 洛扎县| 濮阳县| 阿尔山市| 通道| 柘荣县| 鄢陵县| 文山县| 庆元县| 济南市| 新疆| 武威市| 陇南市| 溧水县| 夹江县| 鱼台县| 石门县| 伊金霍洛旗| 水城县| 井陉县| 衡东县| 兰坪| 沽源县|