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

首頁 > 系統 > Android > 正文

Android 后臺生成長圖并分享示例(非長截圖)

2019-10-21 21:41:41
字體:
來源:轉載
供稿:網友

先看需求:

1.用戶點擊生成長圖按鈕,彈出等待框,后臺生成一張長圖。

2.用戶展示界面和最終生成的長圖,布局完全不一樣,所以不能通過直接將view轉換成bitmap,或者長截圖來實現。

3.生成的長圖,頭部加上公司logo,尾部加上二維碼。

難點分析:

1.后臺進行。

2.長圖保證清晰度,并且不能過大,過大可能會分享失敗。

效果展示:

 Android,后臺,生成,長圖

Android,后臺,生成,長圖

Android,后臺,生成,長圖

Android,后臺,生成,長圖

具體實現: 長圖描述(純手畫,別介意 T_T)

Android,后臺,生成,長圖

1.準備數據:

a.所需的文字內容

b.所需的圖片(必須下載到本地,你可以開啟一個線程進行圖片的下載,在圖片下載完成后,再進行繪制的操作)

2.大致流程:

創建一個類繼承自LinearLayout,初始化綁定xml布局文件: (布局中需要包含的是頭部view、底部view等寬高固定的view;文字等高度wrap_content的view需要在代碼中動態繪制出來,不然高度會有問題,下文有說明)

public LiveDrawLongPictureUtil(Context context) { super(context); init(context);}public LiveDrawLongPictureUtil(Context context, AttributeSet attrs) { super(context, attrs); init(context);}public LiveDrawLongPictureUtil(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);}private void init(Context context) {this.context = context;// 初始化各個控件rootView = LayoutInflater.from(context) .inflate(R.layout.layout_draw_long_picture, this, false);llTopView = rootView.findViewById(R.id.llTopView);// 頭部view,高度固定,可直接獲取到對應的bitmapllContent = rootView.findViewById(R.id.llContent);// 各種固定高度的view,高度固定,可直接獲取到對應的bitmapllBottomView = rootView.findViewById(R.id.llBottomView);// 底部view,高度固定,可直接獲取到對應的bitmap// 測量各個塊兒的view的寬高(這步很重要,后面需要用到寬高數據,進行畫布的創建)  layoutView(llTopView);  layoutView(llContent);  layoutView(llBottomView);  widthTop = llTopView.getMeasuredWidth();  heightTop = llTopView.getMeasuredHeight();  widthBottom = llBottomView.getMeasuredWidth();  heightBottom = llBottomView.getMeasuredHeight();}// 測量view寬高的方法(僅測量父布局) private void measureView(View v) {  int width = HomepageUtil.getPhoneWid();  int height = HomepageUtil.getPhoneHei();v.layout(0, 0, width, height);  int measuredWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);  int measuredHeight = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);  v.measure(measuredWidth, measuredHeight);  v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); }

獲取第一步得到的數據,包括圖片,需要下載完畢,這是前提;

a.計算頭部view、底部view、中間文字內容、中間圖片,以及其他view的總高度(px)和寬度(px);

b.創建一個空白的bitmap,使用bitmap的createBitmap方法,傳入第一步計算得到的寬高,Config可以隨意,推薦RGB_565(省內存):

Bitmap bitmapAll = Bitmap.createBitmap(allBitmapWidth, allBitmapHeight, Bitmap.Config.RGB_565);// 創建所需大小的bitmapCanvas canvas = new Canvas(bitmapAll);// 創建空白畫布canvas.drawColor(Color.WHITE);// 背景顏色Paint paint = new Paint();// 畫筆paint.setAntiAlias(true);// 設置抗鋸齒paint.setDither(true);// 防抖動paint.setFilterBitmap(true);// 設置允許過濾

c.把view從頂部到底部的順序,一塊塊繪制到畫布上;

d.全部view繪制完畢后,保存bitmapAll到本地文件,如需壓縮,可壓縮到指定大小和尺寸;

e.進行分享的操作。至此,基本過程就這樣。

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陈巴尔虎旗| 徐州市| 马关县| 闸北区| 洱源县| 永仁县| 金沙县| 高邑县| 阿瓦提县| 蒙阴县| 沿河| 武义县| 蒙阴县| 德江县| 蒙自县| 武城县| 克东县| 清苑县| 喀喇| 五寨县| 望都县| 东兰县| 藁城市| 高青县| 常宁市| 金平| 牟定县| 城口县| 沙河市| 洛阳市| 苍梧县| 井陉县| 田林县| 嘉荫县| 股票| 建始县| 峨眉山市| 冷水江市| 陕西省| 吉林市| 恩平市|