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

首頁 > 系統 > Android > 正文

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

2019-12-12 01:01:21
字體:
來源:轉載
供稿:網友

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

效果

點擊按鈕生成圖片:

特性

  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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴海县| 乐昌市| 大英县| 芜湖县| 伊通| 夏邑县| 祥云县| 克东县| 兴义市| 永昌县| 翁牛特旗| 星子县| 杭州市| 上杭县| 沙坪坝区| 陆良县| 邛崃市| 丰县| 宁城县| 固始县| 阿合奇县| 墨脱县| 曲沃县| 会泽县| 盐山县| 茌平县| 大英县| 呈贡县| 彩票| 额尔古纳市| 浑源县| 抚顺县| 海原县| 双江| 西乌| 道孚县| 锡林浩特市| 上虞市| 浦县| 新巴尔虎左旗| 玛曲县|