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

Android 動態(tài)加載二維碼視圖生成快照的示例

 更新時(shí)間:2017年10月25日 09:58:11   作者:ganshenml  
本篇文章主要介紹了Android 動態(tài)加載二維碼視圖生成快照的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

1.需求背景

需要實(shí)現(xiàn)一個(gè)動態(tài)加載但不顯示出來的視圖,且該視圖上有個(gè)動態(tài)生成的二維碼,最后用其去生成一張快照(也就是圖片)。
(常見這種情況是來源于“圖片分享”的功能需求,與普通圖片分享不同在于,該快照圖片是動態(tài)加載不顯示的。)

2.需求功能拆解

  1. 動態(tài)二維碼的實(shí)現(xiàn)
  2. 動態(tài)視圖生成快照的實(shí)現(xiàn)

3.踩坑點(diǎn)提要

  1. 獲取不到動態(tài)視圖的bitmap
  2. 無法獲取最新動態(tài)視圖的bitmap

4.開發(fā)實(shí)現(xiàn)

動態(tài)加載的視圖的布局文件代碼:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:id="@+id/qrcodeContentLl" 
  android:background="#F0E68C" 
  android:orientation="vertical"> 
 
  <TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_marginTop="100dp" 
    android:text="二維碼快照" 
    android:textSize="18sp" 
    android:textStyle="italic" /> 
 
  <ImageView 
    android:id="@+id/qrcodeIv" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:layout_gravity="center" 
    android:layout_marginTop="@dimen/activity_vertical_margin" 
    android:scaleType="fitCenter" /> 
 
  <!--<TextView--> 
    <!--android:layout_width="wrap_content"--> 
    <!--android:layout_height="wrap_content"--> 
    <!--android:layout_marginTop="800dp"--> 
    <!--android:text="ahahds"--> 
    <!--android:layout_gravity="center"/>--> 
</LinearLayout> 

大概樣式如下:

(上面的線框是用來顯示動態(tài)生成的二維碼圖片的)

a.動態(tài)二維碼的實(shí)現(xiàn)

關(guān)于這塊內(nèi)容,網(wǎng)上有太多例子了,其實(shí)也不用詳解。主要是利用Zxing提供的jar包來進(jìn)行處理。需要看這塊的詳細(xì)代碼可以去文章最后提供的GitHub地址查看,在此只提供下該jar包的資源下載(項(xiàng)目中若只涉及生成二維碼模塊,那么只要core核心jar包即可):點(diǎn)擊下載>> core-3.3.0.jar

b.動態(tài)視圖生成快照的實(shí)現(xiàn)

private void inflateAndShowCaptureView() { 
   if (hideView == null) { 
     hideView = LayoutInflater.from(this).inflate(R.layout.layout_quick_capture, null); 
     qrcodeIv = (ImageView) hideView.findViewById(R.id.qrcodeIv); 
     hideView.setDrawingCacheEnabled(true);//設(shè)置控件允許繪制緩存 
     hideView.measure(View.MeasureSpec.makeMeasureSpec(mainLayoutLl.getWidth(), View.MeasureSpec.EXACTLY), 
         View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
     hideView.layout(0, 0, hideView.getMeasuredWidth(), hideView.getMeasuredHeight()); 
   } else { 
     hideView.destroyDrawingCache();//要得到新的視圖,就得銷毀之前的緩存 
   } 
 
   showCaptureView(); 
 } 
 
 private void showCaptureView() { 
   String content = contentEt.getText().toString().trim(); 
   if (content == null || content.length() == 0) { 
     return; 
   } 
   if (qrcodeIv.getWidth() == 0) { 
     return; 
   } 
   Bitmap qrcodeBitmap = ZXingUtils.createQRImage(content, qrcodeIv.getWidth(), qrcodeIv.getHeight()); 
   qrcodeIv.setImageBitmap(qrcodeBitmap);//先將生成的二維碼顯示在加載的視圖上 
 
   Bitmap bitmap = hideView.getDrawingCache(); // 獲取視圖的繪制緩存(快照) 
   if (bitmap != null) { 
     showIv.setImageBitmap(bitmap); 
   } 
 
 } 

1.首先獲取到視圖的bitmap是通過getDrawingCache()得到的。

  1. 若視圖是在界面上直接顯示出來的——>那么使用該方法直接獲取bitmap是沒有問題的;
  2. 若視圖是動態(tài)加載且不顯示出來,那么此時(shí)獲取bitmap是null。

此處的解決辦法就是手動給該視圖布局:

hideView.measure(View.MeasureSpec.makeMeasureSpec(mainLayoutLl.getWidth(), View.MeasureSpec.EXACTLY), 
    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
hideView.layout(0, 0, hideView.getMeasuredWidth(), hideView.getMeasuredHeight()); 

以下做點(diǎn)簡單解釋:

View.MeasureSpec.makeMeasureSpec(int size , int mode)中有兩個(gè)參數(shù),size和mode,第一組MeasureSpec中我將size設(shè)置為了當(dāng)前顯示頁面的布局的寬度(也就是屏幕寬度),然后mode設(shè)置為EXACTLY——>所表示的意義是:給hideView中的子View指定了精確的寬度大小為當(dāng)前屏幕的寬度。

mode有三種,EXACTLY,AT_MOST,UNSPECIFIED。在上面代碼中,將高度的size指定為0,mode指定為 UNSPECIFIED 則表示——>整個(gè)動態(tài)加載的視圖高度指定為:依據(jù)于最后子View確認(rèn)的高度。

若將第一組MeasureSpec的相關(guān)參數(shù)也改為size = 0, mode = UNSPECIFIED,則兩組圖對比顯示如下:

可以看到,動態(tài)生成的快照的寬度也變成了顯示二維碼的ImageView的寬度了。

擴(kuò)展:如何在寬高均為size = 0 && mode= UNSPECIFIED 的情況下獲取整個(gè)屏幕大小的視圖呢?
——>用幾個(gè)隱藏的組件埋在視圖的四個(gè)邊界,啊哈哈哈哈哈!

2.通過destroyDrawingCache()來刪除之前的緩存。

最后,GitHub地址>>

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

相關(guān)文章

  • Android之ProgressBar即時(shí)顯示下載進(jìn)度詳解

    Android之ProgressBar即時(shí)顯示下載進(jìn)度詳解

    這篇文章主要為大家詳細(xì)介紹了Android之ProgressBar即時(shí)顯示下載進(jìn)度,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Flutter 插件url_launcher簡介

    Flutter 插件url_launcher簡介

    最近項(xiàng)目需求是打開一個(gè)連接跳轉(zhuǎn)到安卓或蘋果默認(rèn)的瀏覽器。雖然開始一個(gè)簡單的要求,其中的一個(gè)細(xì)節(jié)就是執(zhí)行打開網(wǎng)頁這一操作后,不能看上去像在應(yīng)用內(nèi)部打開,看上去要在應(yīng)用外部打開,今天小編給大家介紹Flutter 插件url_launcher的相關(guān)知識,感興趣的朋友一起看看吧
    2020-04-04
  • android使用DataBinding來設(shè)置空狀態(tài)

    android使用DataBinding來設(shè)置空狀態(tài)

    本篇文章主要介紹了android使用DataBinding來設(shè)置空狀態(tài),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • android studio開發(fā)實(shí)現(xiàn)APP開機(jī)自啟動

    android studio開發(fā)實(shí)現(xiàn)APP開機(jī)自啟動

    這篇文章主要為大家詳細(xì)介紹了android studio開發(fā)實(shí)現(xiàn)APP開機(jī)自啟動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 手勢滑動結(jié)束Activity基本功能的實(shí)現(xiàn)(一)

    手勢滑動結(jié)束Activity基本功能的實(shí)現(xiàn)(一)

    這篇文章主要為大家詳細(xì)介紹了手勢滑動結(jié)束Activity基本功能的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android實(shí)現(xiàn)兩臺手機(jī)屏幕共享和遠(yuǎn)程控制功能

    Android實(shí)現(xiàn)兩臺手機(jī)屏幕共享和遠(yuǎn)程控制功能

    在遠(yuǎn)程協(xié)助、在線教學(xué)、技術(shù)支持等多種場景下,實(shí)時(shí)獲得另一部移動設(shè)備的屏幕畫面,并對其進(jìn)行操作,具有極高的應(yīng)用價(jià)值,本項(xiàng)目旨在實(shí)現(xiàn)兩臺 Android 手機(jī)之間的屏幕共享與遠(yuǎn)程控制,需要的朋友可以參考下
    2025-04-04
  • Android中子線程和UI線程通信詳解

    Android中子線程和UI線程通信詳解

    這篇文章主要介紹了Android中子線程和UI線程通信詳解,本文講解了一些概念、使用、及代碼實(shí)例,需要的朋友可以參考下
    2015-06-06
  • Android掃描本地音樂文件開發(fā)案例分享

    Android掃描本地音樂文件開發(fā)案例分享

    這篇文章主要為大家分享了Android掃描本地音樂文件開發(fā)案例,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 詳解如何在Flutter中集成華為認(rèn)證服務(wù)

    詳解如何在Flutter中集成華為認(rèn)證服務(wù)

    這篇文章主要介紹了詳解如何在Flutter中集成華為認(rèn)證服務(wù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • android效果TapBarMenu繪制底部導(dǎo)航欄的使用方式示例

    android效果TapBarMenu繪制底部導(dǎo)航欄的使用方式示例

    本篇文章主要介紹了android效果TapBarMenu繪制底部導(dǎo)航欄的使用方式,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01

最新評論

麻城市| 大竹县| 乌什县| 郎溪县| 久治县| 中西区| 碌曲县| 登封市| 兴宁市| 临颍县| 丹阳市| 阿尔山市| 望奎县| 界首市| 自贡市| 清镇市| 武宣县| 那坡县| 凤凰县| 永兴县| 商城县| 三明市| 杭锦后旗| 漠河县| 通渭县| 丹凤县| 庄浪县| 嘉鱼县| 固安县| 莫力| 巧家县| 商水县| 江阴市| 天等县| 穆棱市| 桂林市| 岳普湖县| 昭觉县| 喀喇沁旗| 宣威市| 昌都县|