亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android畫板開發之添加背景和保存畫板內容為圖片

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

一、繪制背景

繪制背景的方法有兩種:

  • 自己利用canvas進行繪制
  • 利用view的自帶方法進行繪制

Android,畫板,背景,保存

1.1 canvas繪制背景

自己繪制的背景的方法就是在onDraw回調進行繪制的時候,先draw一個背景,再進行draw原來的內容

override fun onDraw(canvas: Canvas) {    super.onDraw(canvas)    //先繪制顏色作為背景    canvas.drawColor(Color.BLACK)    //畫出緩存bitmap的內容    canvas.drawBitmap(mBufferBitmap,0f,0f,null)  }

1.2 view自帶方法

view有setBackground方法,我利用這個方法設置背景setBackgroundResource(R.drawable.bg),這個方法是怎么樣執行的,來簡單跟蹤一下源碼,ctrl+鼠標左鍵 進去這個方法,最終跳到了setBackgroundDrawable,下面是源碼(刪減了)

public void setBackgroundDrawable(Drawable background) {    computeOpaqueFlags();    if (background == mBackground) {      return;    }    boolean requestLayout = false;    mBackgroundResource = 0;    ......    if (background != null) {      ......      mBackground = background;      applyBackgroundTint();      ...    } else {      /* Remove the background */      mBackground = null;      .......    }    computeOpaqueFlags();    if (requestLayout) {      requestLayout();    }    mBackgroundSizeChanged = true;    invalidate(true);    invalidateOutline();  }

可以看到view里面有一個變量mBackground,我們設置的背景會轉成Drawable然后賦值給它,然后看它是如何繪制的,搜索draw(找到繪制方法,然后看到有一個方法操作了背景drawBackground(canvas),傳遞了畫布過去,這個方法源碼:

private void drawBackground(Canvas canvas) {    final Drawable background = mBackground;    if (background == null) {      return;    }    setBackgroundBounds();    // Attempt to use a display list if requested.    if (canvas.isHardwareAccelerated() && mAttachInfo != null        && mAttachInfo.mHardwareRenderer != null) {      mBackgroundRenderNode = getDrawableRenderNode(background, mBackgroundRenderNode);      final RenderNode renderNode = mBackgroundRenderNode;      if (renderNode != null && renderNode.isValid()) {        setBackgroundRenderNodeProperties(renderNode);        ((DisplayListCanvas) canvas).drawRenderNode(renderNode);        return;      }    }    final int scrollX = mScrollX;    final int scrollY = mScrollY;    if ((scrollX | scrollY) == 0) {      background.draw(canvas);    } else {      canvas.translate(scrollX, scrollY);      background.draw(canvas);      canvas.translate(-scrollX, -scrollY);    }  }

所以利用自帶view的方法,我們可以簡單的完成背景的設置,交給View處理即可。

二、 保存畫板為圖片

保存圖片大概有三種方法:

  • 自行保存自己的繪制的Bitmap
  • 利用view自帶的bitmap
  • 利用view創建bitmap

2.1 自己繪制的Bitmap

我們之前的代碼 是利用一個bufferBitamp和bufferCanvas來進行繪制的,所以,我們的內容就在bufferBitmap,把它保存為圖片即可:

 /**   * 保存圖片   * @param path 保存圖片的路徑   */  fun save(path: String){    if(!TextUtils.isEmpty(path)){      val f = File(path)      if(f.exists()){        f.delete()      }      try{        val out = FileOutputStream(f)        //以90質量保存到輸出到文件輸出流        mBufferBitmap.compress(Bitmap.CompressFormat.JPEG,90,out)        out.flush()        out.close()      }catch (e:Exception){        e.printStackTrace()      }    }  }

但是這種方法,不能保存自行draw繪制的背景。接下來看第二種方法。

2.2 View的drawingCache

在View中,有一個setDrawingCacheEnabled方法,這個方法的作用為是開啟繪圖cache,這個方法也可以增加速度,但是會占用一點內存。所以通常不需要的時候有必要對其進行清理,通過destroyDrawingCache或setDrawingCacheEnabled(false)實現。

開啟了這個方法之后,我們就可以利用getDrawingCache方法來獲取當前view繪制的bitmap數據

所以,在view初始化的時候,開啟緩存

init {   mPaint.style = Paint.Style.STROKE //畫筆為實心   mPaint.color = Color.RED     //顏色   mPaint.strokeCap = Paint.Cap.ROUND //筆觸為圓形   mPaint.strokeWidth = 10f      //畫筆大小    //開啟緩存    isDrawingCacheEnabled = true  }

保存圖片的時候,直接獲取即可,把上面的mBufferBitmap改為getCacheBitmap()即可

/** * 利用view自帶方法獲取bitmap, * 前提是開啟setDrawingCacheEnabled(boolean enabled)*/  fun getCacheBitmap(): Bitmap{    val bm = drawingCache    val result = Bitmap.createBitmap(bm)    //銷毀build的緩存    destroyDrawingCache()    return result  }

2.3 利用view創建bitmap

利用Bitmap的createBitmap方法,創建當前view為bitmap。

fun getBitmap(v: View): Bitmap{    val bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888)    val canvas = Canvas(bitmap)    v.draw(canvas)    return bitmap  }

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
秋霞成人午夜鲁丝一区二区三区| 成人黄色在线免费| 国产精品人成电影在线观看| 91香蕉嫩草神马影院在线观看| xvideos亚洲| 国产精品视频午夜| 国产精品女主播视频| 日韩欧美高清在线视频| 欧美疯狂xxxx大交乱88av| 国产主播喷水一区二区| 国产精品9999| 亚洲成人久久网| 性金发美女69hd大尺寸| 日韩精品免费视频| 午夜欧美大片免费观看| 欧美猛男性生活免费| 97视频在线观看免费高清完整版在线观看| 亚洲第一区在线观看| 国产综合在线视频| 成人黄色av播放免费| 日韩av在线高清| 九九久久精品一区| 久久久久久久成人| 国产这里只有精品| 日韩精品中文字幕有码专区| 91福利视频在线观看| 日韩中文字幕视频| 一本大道久久加勒比香蕉| 欧美性xxxxxxx| 欧美日韩免费在线| 亚洲日本欧美日韩高观看| 热久久这里只有精品| 亚洲色图15p| 热久久这里只有| 国产精品网红福利| 91精品国产91| 成人国产精品久久久久久亚洲| 亚洲国产成人精品久久| 亚洲免费高清视频| 精品视频9999| 日韩欧美成人免费视频| 92国产精品视频| 亚洲精品国产品国语在线| 久久久精品国产亚洲| 亚洲黄色www网站| 不卡av电影院| 亚洲视频自拍偷拍| 欧美性生交xxxxxdddd| 亚洲最大福利网| 成人免费在线视频网站| 日韩欧美主播在线| 亚洲欧美成人精品| 日韩电影免费观看在线观看| 成人欧美在线视频| 欧美日韩免费区域视频在线观看| 在线观看中文字幕亚洲| 欧美性猛交xxxxx免费看| 国产精品久久77777| 久久久久久久网站| 亚洲欧美制服中文字幕| 亚洲欧美国产一本综合首页| 亚洲欧洲一区二区三区在线观看| 亚洲国产精品久久久久久| 91欧美精品成人综合在线观看| 91精品久久久久久| 日本精品视频在线观看| 国产亚洲精品成人av久久ww| 国产丝袜精品第一页| 日韩视频在线免费| 国产精品一区二区性色av| 国产精品免费一区豆花| 一本一本久久a久久精品综合小说| 久久精品成人欧美大片| 亚洲免费精彩视频| 国产亚洲一级高清| 久久最新资源网| 福利二区91精品bt7086| 欧美一区三区三区高中清蜜桃| 亚洲理论片在线观看| 国产精品久久久久91| 久久久久久久影院| 亚洲人成在线观看| 日韩免费在线看| 国产精品第一视频| 国产一区二区在线播放| 国产美女直播视频一区| 欧美色另类天堂2015| 色噜噜狠狠狠综合曰曰曰| 亚洲精品久久久一区二区三区| 成人黄色中文字幕| 亚洲自拍偷拍色图| 91精品久久久久久久久青青| 国产精品高潮呻吟视频| 国产免费成人av| 亚洲在线观看视频| 成人有码视频在线播放| 91精品国产自产在线| 91视频免费网站| 国产精品99久久久久久久久久久久| 国产精品狼人色视频一区| 日韩在线一区二区三区免费视频| 欧美午夜精品久久久久久久| 一本色道久久综合亚洲精品小说| 国产精品青青在线观看爽香蕉| 91精品国产91久久久久久久久| 欧洲美女7788成人免费视频| 78m国产成人精品视频| 欧美色xxxx| 成人国产精品日本在线| 亚洲在线一区二区| 日韩精品在线免费播放| 亚洲欧美在线免费观看| 欧美日韩国产中文字幕| 成人午夜在线影院| 精品日韩美女的视频高清| 久久精品国产亚洲一区二区| 亚洲国产小视频| 久久久久99精品久久久久| 国产成人精品综合久久久| 欧美大片网站在线观看| 成人观看高清在线观看免费| 午夜精品久久久久久久99热| 国产精品久久久久久久久久久久久| 亚洲一区二区三区四区视频| 中文字幕自拍vr一区二区三区| 国产精品自产拍高潮在线观看| 成人黄色大片在线免费观看| 91豆花精品一区| 国产精品自产拍高潮在线观看| 亚洲肉体裸体xxxx137| 欧美精品在线网站| 日本精品久久中文字幕佐佐木| 久久亚洲精品国产亚洲老地址| 日韩av在线一区二区| 日韩成人黄色av| 91欧美日韩一区| 在线观看国产精品日韩av| 免费91麻豆精品国产自产在线观看| 亚洲性猛交xxxxwww| 久久精品视频在线播放| 国产噜噜噜噜噜久久久久久久久| 欧美www视频在线观看| 久久久久久久久久久成人| 国产福利精品在线| 欧美性猛交99久久久久99按摩| xvideos亚洲| 国产综合久久久久| 欧美另类极品videosbestfree| 国产亚洲激情视频在线| 欧美成人免费一级人片100| 日韩精品免费一线在线观看| 国产精品激情av在线播放| 一本一本久久a久久精品综合小说| 91精品久久久久久久久| 亚洲激情免费观看| 久久天天躁狠狠躁老女人| 欧美激情三级免费| 亚洲电影在线观看| 国产午夜精品视频免费不卡69堂| 久久99久久99精品中文字幕| 91精品国产综合久久男男| 日本精品视频在线播放| 亚洲高清免费观看高清完整版| 国语自产在线不卡|