2012-02-16 9 views
1

「レイヤー」という単語が正しいとは思わないかもしれませんが、私は自分がしたいことを正しく理解していると思います。SurfaceViewを使用してキャンバス上にレイヤーを追加して管理する

SurfaceHolder.Callbackを実装したSurfaceViewを使用しています。

私はキャンバスに取り組んでいます。私はかなり複雑な点を描いています。 私は、翻訳されたキャンバスを持っている(移動Xと移動Yは、ユーザーがキャンバスと相互作用したときに変化する可変である)が回転し、スケール:

canvas.translate(0, 0); 
canvas.rotate(-90); 
canvas.translate(translateX, translateY); 
canvas.scale(scaleX, scaleY); 

私の次のステップは、このキャンバスの上にテキストや画像を追加することです。 テキストと画像の両方を拡大縮小したり、回転したり、翻訳したりすることはできません(キャンバスに沿って行う必要があります)。

このような理由から、キャンバスの動きにのみ追従し、ズームインまたはズームアウトや回転では変化しない「レイヤー」などの透明なものがあると考えていました。キャンバス全体にとどまる]。

ありがとうございます。

N.

EDIT:

ここでは抜粋です:

@Override 
    public void onDraw(Canvas canvas) { 
     try{ 
      pt.setColor(Color.BLACK); 
      canvas.drawColor(Color.WHITE); 
      canvas.drawText("HELLOOOOOOOOOOOOOOOO", 100, 10, pt); 
      pt.setAntiAlias(true); 
      canvas.save(); 
      canvas.rotate(-90, 0, 0); 
      canvas.drawText("HELLOOOOOOOOOOOOOOOO", getHeight(), 10, pt); 
      canvas.restore(); 
     } 
     catch(Exception e) 
     {} 
    } 

私はお互いに近い表示されるように2つの 'HELLOOOOOO' をします。どのようにするかわかりません...

答えて

0

save()とrestore()を使用して、すべてのキャンバスが再び「通常」になるようにしましょう。あなたはそれを簡単に引き出すことができるのですか?

聞いたことがあれば、SceneGraphのように機能して保存して復元してください。

+0

正常に機能しますか?私はキャンバスにテキストを置こうとしましたが、それは回転されました。 save()とrestore()について読んでみましょう。 :) – N3sh

+0

私はちょうど試して、テキストが表示されません(私は問題が座標に関連していると思うが、それを解決する方法を理解することはできません):\t \t canvas.save(); \t \t \t \t \t \t canvas.rotate(90、0、0); \t \t \t \t pt.setTextSize(1000); \t \t canvas.drawText( "TEXT"、x、y、pt); \t \t \t \tキャンバス。リストア(); – N3sh

+0

まず、図を作成するよりも、復元するよりも、テキストを描画するよりも保存する必要があります。もしそうなら、あなたは決してキャンバスに触れておらず、正しい座標上にテキストが現れるようなものでなければなりません。 – WarrenFaith

0

私はこれを解決することができました。私は単に使用キャンバス回転:

rotate(+90, X, Y); 

を、次いで、これを行うバック

rotate(-90, X, Y); 

回転し、(X、Y)は同じままで調整します。

関連する問題