国产探花免费观看_亚洲丰满少妇自慰呻吟_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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佛冈县| 尉犁县| 新乡市| 景宁| 乾安县| 固阳县| 锡林郭勒盟| 淄博市| 福安市| 咸阳市| 杭锦旗| 蒲江县| 青神县| 大港区| 龙井市| 枣庄市| 山阴县| 辽宁省| 西峡县| 吴江市| 横山县| 南昌县| 观塘区| 上犹县| 自贡市| 双峰县| 易门县| 兰州市| 西青区| 体育| 漠河县| 孟连| 延长县| 文昌市| 祁东县| 临清市| 墨玉县| 河津市| 仙游县| 宁远县| 宁远县|