欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1.前言

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

2.實(shí)現(xiàn)方法

1)下面是筆者經(jīng)常用的一個(gè)轉(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; 
}

一般情況下,這個(gè)方法能夠正常的工作。但有時(shí)候,生成Bitmap會(huì)出現(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) 計(jì)算的是當(dāng)前所需要的cache大小。ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize()得到的是系統(tǒng)所提供的最大的DrawingCache的值。當(dāng)所需要的drawingCache >系統(tǒng)所提供的最大DrawingCache值時(shí),生成Bitmap就會(huì)出現(xiàn)問題,此時(shí)獲取的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()"方法計(jì)算長(zhǎng)寬。此時(shí),Bitmap就能正確獲取了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Flutter軟鍵盤的原理淺析

    Flutter軟鍵盤的原理淺析

    大家應(yīng)該都知道目前Flutter官方是沒有自定義鍵盤的解決方案,下面這篇文章主要給大家介紹了關(guān)于Flutter軟鍵盤原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • 解析Android中實(shí)現(xiàn)滑動(dòng)翻頁(yè)之ViewFlipper的使用詳解

    解析Android中實(shí)現(xiàn)滑動(dòng)翻頁(yè)之ViewFlipper的使用詳解

    有一些場(chǎng)景,我們需要向用戶展示一系列的頁(yè)面。比如我們正在開發(fā)一個(gè)看漫畫的應(yīng)用,可能就需要向用戶展示一張一張的漫畫圖片,用戶使用手指滑動(dòng)屏幕,可以在前一幅漫畫和后一幅漫畫之間切換。這個(gè)時(shí)候ViewFlipper就是一個(gè)很好的選擇
    2013-05-05
  • Android ListView滾動(dòng)到底后自動(dòng)加載數(shù)據(jù)

    Android ListView滾動(dòng)到底后自動(dòng)加載數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了Android之ListView滾動(dòng)到底后自動(dòng)加載數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android將應(yīng)用調(diào)試log信息保存在SD卡的方法

    Android將應(yīng)用調(diào)試log信息保存在SD卡的方法

    Android將應(yīng)用調(diào)試log信息保存在SD卡的方法大家都知道嗎,下面腳本之家小編給大家分享Android將應(yīng)用調(diào)試log信息保存在SD卡的方法,感興趣的朋友參考下
    2016-04-04
  • Android 自定義View手寫簽名并保存圖片功能

    Android 自定義View手寫簽名并保存圖片功能

    這篇文章主要介紹了Android 自定義View手寫簽名并保存圖片功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2020-03-03
  • Android使用ScrollView實(shí)現(xiàn)滾動(dòng)效果

    Android使用ScrollView實(shí)現(xiàn)滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Android使用ScrollView實(shí)現(xiàn)滾動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 詳解Android中解析XML的方法

    詳解Android中解析XML的方法

    XML在各種開發(fā)中都廣泛應(yīng)用,Android也不例外。這篇文章主要介紹了詳解Android中解析XML的方法,有需要的可以了解一下。
    2016-11-11
  • android實(shí)現(xiàn)字體閃爍動(dòng)畫的方法

    android實(shí)現(xiàn)字體閃爍動(dòng)畫的方法

    這篇文章主要介紹了android實(shí)現(xiàn)字體閃爍動(dòng)畫的方法,涉及Android中線程調(diào)用和Timer計(jì)時(shí)器的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Android Jetpack架構(gòu)組件Lifecycle詳解

    Android Jetpack架構(gòu)組件Lifecycle詳解

    這篇文章主要介紹了Android Jetpack架構(gòu)組件Lifecycle詳解,Lifecycle是Jetpack架構(gòu)組件中用來感知生命周期的組件,使用Lifecycles可以幫助我們寫出和生命周期相關(guān)更簡(jiǎn)潔更易維護(hù)的代碼。對(duì)此感興趣的小伙伴可以來學(xué)習(xí)一下
    2020-07-07
  • Kotlin?LinearLayout與RelativeLayout布局使用詳解

    Kotlin?LinearLayout與RelativeLayout布局使用詳解

    Kotlin?的基本特性就先寫到這里,我們這個(gè)系列的定位是基礎(chǔ),也就是能用就好,夠用就好,我們不會(huì)舉太多的例子,但是這些都是最經(jīng)常用到的特性。從這節(jié)開始就是Kotlin和android?進(jìn)行結(jié)合,使用Kotlin進(jìn)行安卓應(yīng)用的開發(fā)了
    2022-12-12

最新評(píng)論