2017-05-16 13 views
0

アンドロイドウェアのウォッチフェイスを開発中です。私はCanvasハードウェアを高速化したい。マニフェストでハードウェアアクセラレーションを取得する方法CanvasWatchFaceServiceのonDraw()のCanvas?

私は怒鳴る

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

のようにそれを宣言した。しかし、私は私のonDraw(キャンバスキャンバス、のRectの境界)メソッドcanvas.isHardwareAccelerated()の内部から、それを確認したときにfalseを返します。明らかに私のキャンバスはハードウェアアクセラレーションではありません。

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

このキャンバスはどのようにして高速化されますか?

答えて

2

最後に、この問題の解決策が見つかりました。それは簡単で簡単な解決策ではありませんでした。

まず、watchFaceMainクラスが拡張したlibrarから、android.support.wearable.watchface.CanvasWatchFaceServiceクラス全体をコピーする必要がありました。

は、それから私は、私は怒鳴るようにonDraw内の2つの行を編集し怒鳴る

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

       } 
      } 
     } 
    } 

のようなエンジンクラス内のdraw()メソッドを編集する必要がありました。

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.

がうまくいけば、この答えは、あまりにも他の誰かに役立ちます。

関連する問題