2010-12-15 7 views
2

私はAndroidに慣れていませんが、いくつかのJavaの知識があり、Androidのドキュメントと書籍を読んで始めましたが、私は始めています。しかし、私がもっと読んだとしても、Androidプログラミングで本当の経験なしに、私が望むことをするための推奨される方法を知るのは難しいでしょう...どのようにパン/ズームで何らかの表面の画像をたくさんペイントするには?

私が必要とするのは、 /たくさんの画像、おそらく透明性を持つPNGです。私はそれらのすべての画像でこの表面をパンしてズームすることができる必要があります。私はまた、それらの画像のいずれかをクリックして、どの画像がクリックされたかを知ることができる必要があります。

私は、Sony Ericsson開発者からOne Finger Zoom Tutorialを読んでいました。これは、私がしたいことに対する良い解決策のようです。しかし、私はちょっと混乱しています。そのコードは単一のビットマップイメージのためであり、私はそれらの多くをいくつかのサーフェス/キャンバスに描画する必要があります。

私はこれを実現するには、2つの方法を考えています:

  1. ので、私は(onDraw()から)Canvas上の各画像を描画することができますが、私は混乱しているところそれはだ、私はしません何とかコードを適応させますどのように私は現在のコードは、単一の画像のためのシンプルな原因を達成することができます参照してください多くはないです。
  2. すべての画像を1つのビットマップにオーバーレイし、そのビットマップをCanvasの背景として使用します(もう一度、onDraw()から)。 Canvasの画像の位置を配列などに保存し、参照として使用して、ユーザーがそれらの画像をクリックしたかどうかを確認できます。これは可能でしょうか?

ので、現実には、ここで私が求めているものです:

  • 最初に記載の方法は、上記の優れているならば、私はそのようなことを実現することができる方法を理解する助けてください。
  • 2つ目の方が良ければ、それらの画像をどのように重ね合わせて位置を保存し、タッチイベントでそれらを検出することができますか?
  • これをすべて処理する方法があれば、それについて聞いてみたいと思います。

これは非常に基本的なゲームです。私は開発を考えています。そのように行く前に、OpenGLは必要以上のものであり、一度に1ステップずつ取りたいと思います。最初にAndroidプログラミングを学び、いつかOpenGLを学ぶ。

答えて

1

私はこれをまっすぐにしましょう。あなたはそれらのそれぞれに触れることができる複数の画像が欲しいですか? もしそうなら、少し抽象的に考えるべきかもしれません。

ビューオブジェクトがすでに使用(または拡張する)ことができるかどうかではないのはなぜonTouchListeners

+0

ないそれらのすべてが必ずしも、触れることする必要がありますが、あなたはそれらのすべてが触れることに問題があるとまったく何?「より抽象的に」考えて何を意味するのですか?画像それ自体は触れる必要はありません(読み込みポイント2)。そして、あなたが「ビューオブジェクト」と言うときにあなたは何を指していますか?そしてそれをSonyEricsoon One Fingerズームコードでどのように使うことができますか?PS:時間は。 –

2

で構築されてくるので、多分使用されるようにItemizedOverlayビューオブジェクト(単なるアイデア)として各画像を処理するために容易になるだろうMapViewを使用します。 ItemizedOverlayを使用すると、「マーカー」、通常はすべて異なるPNGドロアブルを追加できます。タッチイベントまたはジェスチャーに応答し、画面の位置に応じて配置されます(MapProjectionを介してマップ座標に変換されます)。 (私は、私が取り組んでいるマッピングアプリでそれらを使用します)。レイアウトにはMapViewが必要な独自のdraw()メソッドがありますが、これをnullにしたり、地図レイヤーを表示したり表示したりすることができない可能性があります。

+0

私はAndroidプログラミングを初めて覚えていることを覚えておいてください。私はあなたが何について話しているか分かりません。また、あなたの説明によると、私が私の質問で説明した方法。 –

1

あなたの最初の解決策(下に挿入)は私の意見では最高です。

キャンバスに(onDraw()から)各画像を描画できるようにコードを修正してください。しかし、それは私が混乱しているところです。私はこれをどのように達成できますか? 1つの画像、説明することはあまりありません。

あなたのユースケースによっては、適切な構造、ArrayList(多くのランダムな挿入/削除をしていない場合)の画像が含まれている可能性があります。 onDraw()メソッドでは、このビットマップのリストを反復し、それぞれを描画します。

これを触れさせるには、setOnTouchListenerメソッドを使用します(Viewをサブクラス化する場合はonTouch()をオーバーライドしてください)。ビューが存在するときは常に呼び出されるハンドラを提供すると呼ばれる。ハンドラにはすべてのタッチイベントの位置が与えられます。タッチイベントの位置を判断するために使用できます。もちろん、どのように衝突をテストするかは、ゲームの詳細に依存します。

この方法は最もクリーンではありませんが、最も簡単です(どのように行うかによって最も速くなります)。個人的には、OpenGLは威圧していますが、学習曲線を克服することは、将来的に(vimやemacsのように)大いに恩恵を受けるでしょう。このようなユースケースのために作られました。

タッチイベントの処理の詳細については、このリンクを参照してください。 http://developer.android.com/guide/topics/ui/ui-events.html

+0

私はCanvasで各画像を描画する方法について、SonyEricssonのコードを考慮して、まだ混乱しています。だから私は2番目を示唆したので、すべての画像をビットマップにペイントし、そのビットマップをSonyEricssonコードで使用する方が簡単だったようです。しかし、私はAndroidの開発に新しいので、私はより良い/より簡単ではありません。 –

+1

現在のバージョンでは、 "canvas.drawBitmap(mBitmap、mRectSrc、mRectDst、mPaint);"を呼び出すonDrawメソッドがあります。あなたがやることは、その呼び出しをループでラップすることです。何かのもの(例えば、b:game_objects){canvas.drawBitmap(b.bitmap、b.source、b.dest、b.paint);}のように、より多くのオーバーロードされたdrawBitmapメソッドがあなたに適しています。 – num1

+0

さて、私はこのプロジェクトに再び参加したときにそれを見ていきます。 –

1

この質問は少し古いですが、私はいくつかの画像をドロップするように管理するために

:-) 1つの液と、まだ一つの質問があり、私はこのクラス(ColorBall)でのArrayListを作成します。

ビューで
private Bitmap img; // the image of the ball 
private int coordX = 0; // the x coordinate at the canvas 
private int coordY = 0; // the y coordinate at the canvas 
private int id; // gives every ball his own id, for now not necessary 
private static int count = 1; 
private boolean goRight = true; 
private boolean goDown = true; 
private int height = 50; 
private int width = 50; 
private Rect mRectSrc = new Rect(); 
private Rect mRectDst = new Rect(); 

、私は画像の限度内でクリックした場合、私は、クリックしたときに、私は(if (x > ball.getX() && x < ball.getX()+ball.getWidth() && y > ball.getY() && y < ball.getY()+ball.getHeight())に確認しやすい。)coordXとcoordYを変更します。

OnDrawイベントでは、配列のすべての要素を調べ、対応する場所に描画します。

for (ColorBall ball : colorballs) { 
    canvas.drawBitmap(ball.getBitmap(), ball.getX(), ball.getY(), null); 
} 

しかし、私はまだズームでstuckedです。私はそれを次のポスト(http://stackoverflow.com/questions/6422759/zoom-a-bitmap-with-drawbitmap-and-rectangles-android)で解決しようとしていますが、私はまだブロックされています:-(

乾杯

+0

これは古いかもしれませんが、私はまだ私が探していた答えを得ていませんでした。事実、質問を投稿した後にこの問題に取り組んだことはありませんでした。私の小さなゲームのアイデアを始める時間はありませんでした。しかし、私が時間を見つけたら、あなたのアプローチをテストすることは間違いありません。 –

関連する問題