【问题标题】:How to get hardware accelerated Canvas in onDraw() of CanvasWatchFaceService?如何在 CanvasWatchFaceService 的 onDraw() 中获得硬件加速的 Canvas?
【发布时间】:2023-03-26 03:34:01
【问题描述】:

我正在为 Android Wear 开发表盘。我想让 Canvas 硬件加速。

在清单中我声明如下

     <application
         android:hardwareAccelerated="true"
         ..>
            <service
            android:name=".WatchFaceMain"
            android:hardwareAccelerated="true"
            ..>
    </application>

但是当我从我的 onDraw(Canvas canvas, Rect bounds) 方法内部检查它时,canvas.isHardwareAccelerated() 返回 false。这显然意味着我的画布没有硬件加速。

 @Override
 public void onDraw(Canvas canvas, Rect bounds) {
       ...
       boolean isAccelarated = canvas.isHardwareAccelerated();
       .......
 }

如何使这个画布硬件加速?

【问题讨论】:

    标签: android canvas wear-os


    【解决方案1】:

    终于找到了解决这个问题的办法。虽然这不是一个直接或简单的解决方案。

    首先,我必须从我的 WatchFaceMain 类扩展的库中复制整个 android.support.wearable.watchface.CanvasWatchFaceService 类。

    然后我必须像下面这样编辑引擎类中的 draw() 方法

    public abstract class CanvasWatchFaceService extends WatchFaceService {
        .....
    
            public class Engine extends android.support.wearable.watchface.WatchFaceService.Engine {
              ...
                private void draw(SurfaceHolder holder) {
                    this.mDrawRequested = false;
                    Canvas canvas = holder.getSurface().lockHardwareCanvas();
                    if(canvas != null) {
                        try {
                            this.onDraw(canvas, holder.getSurfaceFrame());
                        } finally {
                            holder.getSurface().unlockCanvasAndPost(canvas);
                        }
    
                    }
                }
            }
        }
    

    我在 onDraw 中编辑了两行,如下所示。

    from
     Canvas canvas = holder.lockCanvas();
    To
     Canvas canvas = holder.getSurface().lockHardwareCanvas();
    
    And From
     holder.unlockCanvasAndPost(canvas);
    To
     holder.getSurface().unlockCanvasAndPost(canvas);
    

    我仍然想知道为什么 CanvasWatchFaceService 没有提供任何更简单的方法来请求硬件加速画布!

    More detail solution is available here in this Article.

    希望这个答案也对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 2015-12-25
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多