收藏
回答

安卓 canvas组件draw函数的回调不执行

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug canvas、CanvasContext.draw() 客户端 6.7.1 2.4.0

canvas遮挡了底部按钮,canvas在组件的组件内,按钮在页面


方法一:

cover-view包裹页面按钮,ios没问题,安卓还是被canvas遮挡;又把按钮放到组件内,嵌套在canvas内还是被遮挡;

方法二:

2、canvas转图片,ios没问题,安卓draw()的回调不执行,下面的代码只能打印到‘开始画’,然后就是fail了。


查了论坛,发现近期很多人碰到canvas的draw()回调不执行的问题,希望官方大大能看到这篇文章,并排查一下问题。多谢~


setTimeout(() => {

    console.log('开始画');

    ctx.draw(true, () => {

        console.log('开始转换');

        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);


最后一次编辑于  2018-11-28
回答关注问题邀请回答
收藏

4 个回答

  • 社区技术运营专员-白柿子
    社区技术运营专员-白柿子
    2018-11-28

    提供一下出现问题的机型和微信版本,以及能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    2018-11-28
    赞同
    回复
  • Sparrow
    Sparrow
    01-09

    兄弟解决了吗?碰到一样的问题,求解决方案

    01-09
    赞同
    回复 1
    • SL
      SL
      01-09

      已经解决了啊,看下面的回复,你试下

      01-09
      回复
  • 少年癸
    少年癸
    2018-12-26

    谢谢!折腾了我两天的问题在你这解决了,谢谢!

    2018-12-26
    赞同
    回复 2
    • SL
      SL
      2018-12-26

      哈哈哈~开心...

      2018-12-26
      回复
    • 少年癸
      少年癸
      2018-12-26回复SL

      加个WeChat一起交流嘛。 aW1fbXJfbHlubg==

      2018-12-26
      回复
  • 旅行
    旅行
    2018-11-29

    遇到同样的问题,canvas放在组件内 draw() 回调不执行,放在 page内,可以

    2018-11-29
    赞同
    回复 7
    • SL
      SL
      2018-12-17

      canvas.draw(true, setTimeout(() => {

          this.canvasToImage();    // canvas转图片的操作

      }, 1000));


      你尝试这样试试看,我这边是可以了


      2018-12-17
      回复
    • 城主
      城主
      01-27回复SL

      你这等同于

      canvas.draw(true)

      setTimeout(() => this.canvasToImage(), 1000)


      渲染时间超过一秒就挂了。。。

      01-27
      回复
    • SL
      SL
      01-28回复城主

      这不等同吧...

      CanvasContext.draw(boolean reserve,function callback)

      其中 function callback 是绘制完成后执行的回调函数


      01-28
      回复
    • 城主
      城主
      01-28回复SL

      你需要補一下js基礎。。。。,你傳進去的callback就是一個timerId

      01-28
      回复
    • SL
      SL
      01-28回复城主

      那你就把延迟时间设长点,这是目前我能解决的方法

      如果你有更好的,欢迎提供

      01-28
      回复
    查看更多(2)