2017-05-16 2 views
0

Je développe un visage de montre pour les vêtements android. Je veux accélérer le matériel de Canvas.Comment obtenir Canvas accéléré matériellement dans onDraw() de CanvasWatchFaceService?

dans le manifeste comme je l'ai déclaré ci-dessous

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

Mais quand je l'ai vérifié à l'intérieur de mon onDraw (toile Canvas, limites Rect) Méthode canvas.isHardwareAccelerated() retourne false. ce qui signifie clairement que ma toile n'est pas accélérée matériellement.

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

Comment est-ce que je accélère cette toile?

Répondre

2

Enfin trouvé une solution à ce problème. Bien que ce ne soit pas une solution simple ou directe.

D'abord, j'ai copié toute la classe android.support.wearable.watchface.CanvasWatchFaceService de librar, que ma classe WatchFaceMain a étendue.

Je dû modifier le tirage au sort() Méthode dans la classe comme moteur ci-dessous

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

       } 
      } 
     } 
    } 

deux lignes I édité à l'intérieur comme onDraw ci-dessous.

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

And From 
holder.unlockCanvasAndPost(canvas); 
To 
holder.getSurface().unlockCanvasAndPost(canvas); 

Je me demande encore pourquoi CanvasWatchFaceService n'a pas offert de façon plus facile de demander une toile accélération matérielle!

More detail solution is available here in this Article.

Espérons que cette réponse aide à quelqu'un d'autre aussi.