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

首頁 > 系統 > Android > 正文

android異步生成圖片的示例代碼

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

下面來說說在Android上如果異步生成圖片,通過xml布局用View排版好圖片樣式,在子線程生成一張圖片,以滿足生成用來分享的圖片等需求(生成圖片前設置可變元素,如用戶的頭像,昵稱等)。

效果

點擊按鈕生成圖片:

android異步生成圖片,android,生成圖片

特性

  1. 通過布局和View的方式設計圖片樣式。
  2. 在子線程中生成和保存圖片。
  3. 封裝好工具類,直接使用即可。

核心代碼

private Bitmap createBitmap(View view) {    int widthSpec = View.MeasureSpec.makeMeasureSpec(view.getLayoutParams().width, View.MeasureSpec.EXACTLY);    int heightSpec = View.MeasureSpec.makeMeasureSpec(view.getLayoutParams().height, View.MeasureSpec.EXACTLY);    view.measure(widthSpec, heightSpec);    int measureWidth = view.getMeasuredWidth();    int measureHeight = view.getMeasuredHeight();    view.layout(0, 0, measureWidth, measureHeight);    int width = view.getWidth();    int height = view.getHeight();    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);    Canvas canvas = new Canvas(bitmap);    view.draw(canvas);    return bitmap;  }

原理說明

通過走一遍ViewGroup的測量(measure),布局(layout),draw流程,把布局展示的界面畫到我們準備好的bitmap上(這一過程可在非UI線程完成),再把bitmap保存在文件或顯示到界面上。

  1. 在布局中寫好圖片的樣子,然后把布局inflate成View,當然也可以直接代碼編寫View,設置好里面的可變元素,如頭像,昵稱等。
  2. 通過調用View的measure,layout方法使之測量出內部各控件的大小和排列好各控件。
  3. 創建一個和View大小相同的空Bitmap,新建一個畫布傳入該bitamp(new Canvas(bitmap)),調用view的draw(canvas)方法,view會把圖片繪制在該bitmap上。
  4. 保存到文件或直接使用圖片。

使用方法

在xml中布局圖片樣式:

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="200dp"  android:layout_height="200dp"  android:background="#ECAA0A">  <ImageView    android:layout_width="160dp"    android:layout_height="94dp"    android:layout_gravity="center_horizontal"    android:src="@mipmap/pic_bg" />  <ImageView    android:id="@+id/invitation_share_link_pic_avatar_iv"    android:layout_width="80dp"    android:layout_height="80dp"    android:layout_gravity="center_horizontal|bottom"    android:layout_marginBottom="10dp"    android:src="@mipmap/ic_launcher" /></FrameLayout>

寫一個自己的Model繼承自GenerateModel,設置可變元素并使用GeneratePictureManager單例的generate方法開始生成:

private void generate() {    SharePicModel sharePicModel = new SharePicModel((ViewGroup) getWindow().getDecorView());    sharePicModel.setAvatarResId(R.mipmap.ic_launcher);    GeneratePictureManager.getInstance().generate(sharePicModel, (throwable, bitmap) -> {      if (throwable != null || bitmap == null) {        Toast.makeText(this, getString(R.string.generate_pic_error), Toast.LENGTH_SHORT).show();      } else {        Toast.makeText(this, getString(R.string.generate_pic_success), Toast.LENGTH_SHORT).show();        mResultIv.setImageBitmap(bitmap);      }    });  }

源碼地址Github: https://github.com/homgwu/picgenerator

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰兴市| 乌审旗| 柳林县| 图片| 阿克陶县| 黄大仙区| 黎平县| 前郭尔| 东乌珠穆沁旗| 桂平市| 和静县| 玉龙| 仁布县| 武清区| 峡江县| 苍南县| 云阳县| 宜良县| 虎林市| 东丽区| 蓬溪县| 中超| 天峨县| 河北省| 盘锦市| 义乌市| 弋阳县| 赤壁市| 水富县| 美姑县| 当雄县| 周口市| 新蔡县| 西乌| 永仁县| 柏乡县| 金塔县| 揭东县| 深水埗区| 宣武区| 凤阳县|