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

Android 后臺(tái)生成長(zhǎng)圖并分享示例(非長(zhǎng)截圖)

 更新時(shí)間:2018年08月12日 10:02:27   作者:工藤一號(hào)  
這篇文章主要介紹了Android 后臺(tái)生成長(zhǎng)圖并分享示例(非長(zhǎng)截圖),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

先看需求:

1.用戶點(diǎn)擊生成長(zhǎng)圖按鈕,彈出等待框,后臺(tái)生成一張長(zhǎng)圖。

2.用戶展示界面和最終生成的長(zhǎng)圖,布局完全不一樣,所以不能通過(guò)直接將view轉(zhuǎn)換成bitmap,或者長(zhǎng)截圖來(lái)實(shí)現(xiàn)。

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

難點(diǎn)分析:

1.后臺(tái)進(jìn)行。

2.長(zhǎng)圖保證清晰度,并且不能過(guò)大,過(guò)大可能會(huì)分享失敗。

效果展示:

 

具體實(shí)現(xiàn): 長(zhǎng)圖描述(純手畫,別介意 T_T)

1.準(zhǔn)備數(shù)據(jù):

a.所需的文字內(nèi)容

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

2.大致流程:

創(chuàng)建一個(gè)類繼承自LinearLayout,初始化綁定xml布局文件: (布局中需要包含的是頭部view、底部view等寬高固定的view;文字等高度wrap_content的view需要在代碼中動(dòng)態(tài)繪制出來(lái),不然高度會(huì)有問(wèn)題,下文有說(shuō)明)

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;

// 初始化各個(gè)控件

rootView = LayoutInflater.from(context) .inflate(R.layout.layout_draw_long_picture, this, false);

llTopView = rootView.findViewById(R.id.llTopView);// 頭部view,高度固定,可直接獲取到對(duì)應(yīng)的bitmap

llContent = rootView.findViewById(R.id.llContent);// 各種固定高度的view,高度固定,可直接獲取到對(duì)應(yīng)的bitmap

llBottomView = rootView.findViewById(R.id.llBottomView);// 底部view,高度固定,可直接獲取到對(duì)應(yīng)的bitmap

// 測(cè)量各個(gè)塊兒的view的寬高(這步很重要,后面需要用到寬高數(shù)據(jù),進(jìn)行畫布的創(chuàng)建)

  layoutView(llTopView);
  layoutView(llContent);
  layoutView(llBottomView);

  widthTop = llTopView.getMeasuredWidth();
  heightTop = llTopView.getMeasuredHeight();

  widthBottom = llBottomView.getMeasuredWidth();
  heightBottom = llBottomView.getMeasuredHeight();
}

// 測(cè)量view寬高的方法(僅測(cè)量父布局)
 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());
 }

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

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

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

Bitmap bitmapAll = Bitmap.createBitmap(allBitmapWidth, allBitmapHeight, Bitmap.Config.RGB_565);// 創(chuàng)建所需大小的bitmap

Canvas canvas = new Canvas(bitmapAll);// 創(chuàng)建空白畫布
canvas.drawColor(Color.WHITE);// 背景顏色
Paint paint = new Paint();// 畫筆
paint.setAntiAlias(true);// 設(shè)置抗鋸齒
paint.setDither(true);// 防抖動(dòng)
paint.setFilterBitmap(true);// 設(shè)置允許過(guò)濾

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

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

e.進(jìn)行分享的操作。至此,基本過(guò)程就這樣。

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

相關(guān)文章

最新評(píng)論

舒兰市| 盘山县| 大同市| 临泽县| 杭锦旗| 堆龙德庆县| 龙川县| 甘南县| 云阳县| 吴旗县| 盘山县| 上思县| 平安县| 南皮县| 德兴市| 西峡县| 武城县| 湘阴县| 南阳市| 青浦区| 沽源县| 泗洪县| 三门峡市| 邳州市| 鄂伦春自治旗| 伊川县| 炉霍县| 石嘴山市| 弥渡县| 呼图壁县| 大荔县| 巴青县| 甘南县| 广州市| 陆良县| 无锡市| 康马县| 新密市| 丰都县| 玉门市| 陇西县|