安卓 canvas組件draw函數(shù)的回調(diào)不執(zhí)行

安卓 canvas組件draw函數(shù)的回調(diào)不執(zhí)行

canvas遮擋了底部按鈕哨免,canvas在組件的組件內(nèi)茎活,按鈕在頁面

方法一:
cover-view包裹頁面按鈕,ios沒問題琢唾,安卓還是被canvas遮擋载荔;又把按鈕放到組件內(nèi),嵌套在canvas內(nèi)還是被遮擋采桃;

方法二:
2懒熙、canvas轉(zhuǎn)圖片,ios沒問題普办,安卓draw()的回調(diào)不執(zhí)行煌珊,下面的代碼只能打印到‘開始畫’,然后就是fail了泌豆。

很多人碰到canvas的draw()回調(diào)不執(zhí)行的問題

setTimeout(() => {
  console.log('開始畫');
  ctx.draw(true, () => {
    console.log('開始轉(zhuǎn)換');
    wx.canvasToTempFilePath({
      x: 0,
      y: 0,
      width: 690,
      height: 552,
      canvasId: canvasId,
      success: res => {
        console.log('success', res.tempFilePath)
      },
      fail: err => {
       // eslint-disable-next-line
       console.log('fail', err, err.stack);
      }
    }, this);
  });
}, 4000);

解決方案:

  • canvas放在組件內(nèi) draw() 回調(diào)不執(zhí)行定庵,放在 page內(nèi)可以執(zhí)行
  • 出現(xiàn)這個問題,放在page里draw回調(diào)可以執(zhí)行,放在組件里就不行

轉(zhuǎn)載來自微信開放社區(qū)

Canvas 第二次draw回調(diào)失效蔬浙,圖片不顯示

想要多次保存文件猪落,但是圖不是相同的,實際場景是要畫3張不同的圖畴博,實際場景是根據(jù)接口返回的數(shù)據(jù) canvas生成三張不同樣式的名片 用戶選擇喜歡的樣式保存圖片到相冊笨忌。

ctx.draw(false, () => {
  drawed.call(this);
});

ctx.draw(true, () => {
  drawed.call(this);
});

畫圖的API用起來感覺一次操作沒完的時候,進行第二次操作有會問題俱病。之前我碰見的是 canvas 轉(zhuǎn)數(shù)組的API官疲,不能連續(xù)調(diào)用。亮隙。也是必須一次轉(zhuǎn)換完成之后途凫,才能進行第二次。如果有必要的話溢吻,你也可以考慮用多個canvas試試维费,看能不能同時進行

解決方案:

  • 遞歸
<image wx:for="{{imgList}}" src="{{item}}" style="width:200rpx;height:200rpx;"></image>
<canvas canvas-id='canvas' style="width:200px;height:200px;position:absolute;left:800rpx"></canvas>
const app = getApp()

Page({
    data: {
        imgList:[]
    },
    onReady: function() {
        this.ctx = wx.createCanvasContext("canvas")
        this.list = ["red","yellow","blue"]
        this.index = 0
        this.drawFn()
    },
    drawFn: function(){
        if(this.index<this.list.length){
            let color = this.list[this.index]
            this.ctx.setFillStyle(color)
            this.ctx.fillRect(0, 0, 200, 200)
            this.ctx.draw(false,()=>{
                wx.canvasToTempFilePath({
                    canvasId: 'canvas',
                    success:res=>{
                        console.log(res)
                        this.data.imgList.push(res.tempFilePath)
                        this.setData({
                            imgList: this.data.imgList
                        })
                        this.index++
                        this.drawFn()
                    }
                }, this)
            })
        }
    }
})

轉(zhuǎn)載自 微信開放社區(qū)

畫布canvas.draw方法callback真機下不執(zhí)行的問題解決

CanvasContext.draw(boolean reserve, function callback) 一些場景中部分真機 callback 回調(diào)未觸發(fā)的問題分析與解決

ctx.setFillStyle('#F83');
ctx.fillRect(0, 0, 400, 800);
ctx.draw(true,()=>{//第一次調(diào)用draw方法
  if (hasImage) {
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success (res) {
        const tempFilePaths = res.tempFilePaths
        ctx.drawImage(tempFilePaths[0], 10, 10, 300, 300); //做了一個畫圖動作
        ctx.draw(true, drawAfterToTempFile); //第二次調(diào)用draw方法,真機下drawAfterToTempFile方法會被執(zhí)行
        }
      })
  } else { //完成最后繪制
    //部分真機下drawAfterToTempFile回調(diào)不會被執(zhí)行
    ctx.draw(true, drawAfterToTempFile);//第二次調(diào)用draw方法
    //猜測由于第二次調(diào)用draw方法與第一次調(diào)用之間畫布沒有任何其它動作促王,所以第二次draw方法并沒有實際執(zhí)行到觸發(fā)callback回調(diào)的地方犀盟,導(dǎo)致callback看似失效。

    //修改方法一:在第二次調(diào)用draw方法之前執(zhí)行一些動作蝇狼,例如:ctx.moveTo(0,0);ctx.fill();
    //修改方法二:既然第二次調(diào)用draw方法沒有任何繪制動作阅畴,那就直接調(diào)用執(zhí)行drawAfterToTempFile()就行了,沒必要包一個draw方法迅耘。
  }
});
var drawAfterToTempFile = function() {
  wx.canvasToTempFilePath({
    canvasId: "myCanvasId",
    success(res) {
      console.log('繪制圖片存為臨時文件:', res.tempFilePath)
    },
    fail(err) {
      console.log('繪制圖片存為臨時文件失敿妗:', err);
    }
  }, _this)
}

轉(zhuǎn)載自微信開放社區(qū)

最終解決問題的是,最后的這個方法豹障,使canvasContext發(fā)生需要draw的變更。特此記錄

2019-08-23

于上海

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末焦匈,一起剝皮案震驚了整個濱河市血公,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缓熟,老刑警劉巖累魔,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異够滑,居然都是意外死亡垦写,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門彰触,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梯投,“玉大人,你說我怎么就攤上這事》直停” “怎么了尔艇?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長么鹤。 經(jīng)常有香客問我终娃,道長,這世上最難降的妖魔是什么蒸甜? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任棠耕,我火速辦了婚禮,結(jié)果婚禮上柠新,老公的妹妹穿的比我還像新娘窍荧。我一直安慰自己,他們只是感情好登颓,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布搅荞。 她就那樣靜靜地躺著,像睡著了一般框咙。 火紅的嫁衣襯著肌膚如雪咕痛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天喇嘱,我揣著相機與錄音茉贡,去河邊找鬼。 笑死者铜,一個胖子當(dāng)著我的面吹牛腔丧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播作烟,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼愉粤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拿撩?” 一聲冷哼從身側(cè)響起衣厘,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎压恒,沒想到半個月后影暴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡探赫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年型宙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伦吠。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡妆兑,死狀恐怖魂拦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箭跳,我是刑警寧澤晨另,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站谱姓,受9級特大地震影響借尿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屉来,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一路翻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茄靠,春花似錦茂契、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脐雪,卻和暖如春厌小,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背战秋。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工璧亚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脂信。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓癣蟋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狰闪。 傳聞我的和親對象是個殘疾皇子疯搅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容