2017-12-11 4 views
0

Android Studioでキャンバスに描画することで簡単なアニメーションを作成したいと考えています。私は(下の私自身のコードを参照してください)基本的なJavaコードを設定するには、このチュートリアルシリーズを踏襲:Android:Canvasで描画するためにonDraw()またはrun()をオーバーライドします

https://www.youtube.com/watch?v=UH2OWnq7NQ4

彼はすべての描画を行うにはrun()メソッドを上書きしている、しかし、他のみんなはそれを行うように見えますonDraw()メソッドで宣言します。どちらの方法が一般的に優れていますか?私はこのようにするときに問題にぶつかるのだろうか?

public class AnimationActivity extends SurfaceView implements Runnable { 

    Thread thread = null; 
    boolean canDraw = false; 

    Bitmap backgroundBlack; 
    Canvas canvas; 
    SurfaceHolder surfaceHolder; 

    public AnimationActivity(Context context) { 
     super(context); 
     surfaceHolder = getHolder(); 
     backgroundBlack = BitmapFactory.decodeResource(getResources(), R.drawable.background_black); 
    } 

    @Override 
    public void run() { 
     prepPaintBrushes(); 

     while (canDraw) { 

      if (!surfaceHolder.getSurface().isValid()) { 
       continue; 
      } 

      canvas = surfaceHolder.lockCanvas(); 
      canvas.drawBitmap(backgroundBlack,0,0, null); 

      //drawing is done here 

      surfaceHolder.unlockCanvasAndPost(canvas); 

      try { 
       Thread.sleep(500); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    public void pause() { 
     canDraw = false; 

     while (true) { 
      try { 
       thread.join(); 
       break; 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 

     thread = null; 
    } 

    public void resume() { 
     canDraw = true; 
     thread = new Thread(this); 
     thread.start(); 
    } 

} 

答えて

0

私はこのAPIに精通していませんが、グラフィックスプログラミングの経験から、自分のレンダリングループを書くことは非常に疑わしいようです。 sleep()を呼び出すことも大きなノーノです。これらの両方が応答しないUIにつながります。

SurfaceViewのドキュメントとチュートリアルをthe official Android siteに読み込むことをお勧めします。

関連する問題