最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析Android中View轉(zhuǎn)換為Bitmap及getDrawingCache=null的解決方法

 更新時間:2016年11月18日 15:03:23   作者:Devin Zhang  
在android中經(jīng)常會遇到View轉(zhuǎn)換為Bitmap的情形,本篇文章主要介紹了Android中View轉(zhuǎn)換為Bitmap及getDrawingCache=null的解決方法,有需要的可以了解一下。

1.前言

Android中經(jīng)常會遇到把View轉(zhuǎn)換為Bitmap的情形,比如,對整個屏幕視圖進行截屏并生成圖片;Coverflow中需要把一頁一頁的view轉(zhuǎn)換為Bitmap、以便實現(xiàn)復雜的圖形效果(陰影、倒影效果等);再比如一些動態(tài)的實時View為便于觀察和記錄數(shù)據(jù)、需要臨時生成靜態(tài)的Bitmap。

2.實現(xiàn)方法

1)下面是筆者經(jīng)常用的一個轉(zhuǎn)換方法

  public static Bitmap convertViewToBitmap(View view, int bitmapWidth, int bitmapHeight){
    Bitmap bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);
    view.draw(new Canvas(bitmap));
    
    return bitmap;
  }

或者用如下方法:

public static Bitmap convertViewToBitmap(View view){
    view.buildDrawingCache();
    Bitmap bitmap = view.getDrawingCache();
    return bitmap; 
}

一般情況下,這個方法能夠正常的工作。但有時候,生成Bitmap會出現(xiàn)問題(Bitmap全黑色)。主要原因是drawingCache的值大于系統(tǒng)給定的值。我們可以看一下buildDrawingCache()方法中的一段代碼:

if (width <= 0 || height <= 0 ||(width * height * (opaque && !translucentWindow ? 2 : 4) > ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize())) {  
         destroyDrawingCache();  
         return;  
 } 

上面的代碼中,width和height是所要cache的view繪制的寬度和高度,所以(width * height * (opaque && !translucentWindow ? 2 : 4) 計算的是當前所需要的cache大小。ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize()得到的是系統(tǒng)所提供的最大的DrawingCache的值。當所需要的drawingCache >系統(tǒng)所提供的最大DrawingCache值時,生成Bitmap就會出現(xiàn)問題,此時獲取的Bitmap就為null。

 所以在只需要修改所需的cache值就可以解決問題了。于是我們引入第二種方法:

2)完美的解決方案

public static Bitmap convertViewToBitmap(View view){
     view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
    view.buildDrawingCache();
    Bitmap bitmap = view.getDrawingCache();

     return bitmap;
}

view 使用 "getMeasuredWidth()" and "getMeasuredHeight()"方法計算長寬。此時,Bitmap就能正確獲取了。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入android中The connection to adb is down的問題以及解決方法

    深入android中The connection to adb is 

    本篇文章是對android中The connection to adb is down的問題以及解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Android自動測試工具Monkey

    Android自動測試工具Monkey

    Monkey是Android中的一個命令行工具,可以運行在模擬器里或?qū)嶋H設(shè)備中。它向系統(tǒng)發(fā)送偽隨機的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實現(xiàn)對正在開發(fā)的應(yīng)用程序進行壓力測試。Monkey測試是一種為了測試軟件的穩(wěn)定性、健壯性的快速有效的方法
    2016-01-01
  • Android實現(xiàn)秒表功能

    Android實現(xiàn)秒表功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)簡易秒表功能,具備啟停功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Android studio 快捷鍵大全

    Android studio 快捷鍵大全

    android studio使用教程,主要為大家介紹的是android studio快捷鍵,如果我們掌握了一些常用快捷鍵,那么在使用android studio的過程中會達到事半功倍的效果哦
    2016-01-01
  • 如何在Android上使用opencv

    如何在Android上使用opencv

    這篇文章主要介紹了如何在Android上使用opencv,幫助大家更好的利用opencv處理圖像,感興趣的朋友可以了解下
    2020-12-12
  • Android自定義彈框Dialog效果

    Android自定義彈框Dialog效果

    這篇文章主要為大家詳細介紹了Android自定義彈框Dialog效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 利用Flutter輕松制作紅包界面

    利用Flutter輕松制作紅包界面

    這篇文章主要為大家詳細介紹了如何利用Flutter實現(xiàn)輕松制作一個紅包界面,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2022-11-11
  • Android編程監(jiān)聽網(wǎng)絡(luò)連接狀態(tài)改變的方法

    Android編程監(jiān)聽網(wǎng)絡(luò)連接狀態(tài)改變的方法

    這篇文章主要介紹了Android編程監(jiān)聽網(wǎng)絡(luò)連接狀態(tài)改變的方法,基于BroadcastReceiver實現(xiàn)針對網(wǎng)絡(luò)連接狀態(tài)的監(jiān)聽功能,需要的朋友可以參考下
    2017-06-06
  • Android實現(xiàn)圖片瀏覽器示例

    Android實現(xiàn)圖片瀏覽器示例

    這篇文章主要介紹了Android實現(xiàn)圖片瀏覽器示例,需要的朋友可以參考下
    2014-07-07
  • Android讀寫文件工具類詳解

    Android讀寫文件工具類詳解

    這篇文章主要為大家詳細介紹了Android讀寫文件工具類,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論

肇庆市| 永年县| 茂名市| 新民市| 东方市| 札达县| 牟定县| 泾源县| 长子县| 云和县| 犍为县| 鄄城县| 河池市| 黄平县| 盐津县| 城口县| 屯昌县| 新泰市| 长岭县| 南通市| 榆社县| 额敏县| 神木县| 琼结县| 商河县| 九江县| 肥东县| 寻甸| 电白县| 古田县| 阿尔山市| 娄烦县| 宜川县| 四会市| 平谷区| 韶关市| 兴和县| 波密县| 东光县| 湘阴县| 江华|