2009-07-08 13 views
11

640×480ピクセルのオフスクリーンビットマップを作成してSurfaceViewに表示するアンドロイドアプリケーションを作成しています。イメージのサイズは、ハンドセットの実際の表示よりも大きいことに注意してください。Android SurfaceViewのスクロール

アプリケーションの動作方法は、最初に画像の左上隅(0,0)を表示してから、画像をスクロールできるようにしたいと考えています。

My SurfaceviewクラスはonMeasureコールバックを実装し、電話スクリーンに対応するイメージの領域を表示する1024 * 768のサイズを返します。私は非常に限られたドキュメント(一束のクラスと一貫性のない呼び出し)のために不可能に近いスクロールのサポートを実装したいと思います。 scrollByを呼び出そうとしましたが、うまくいきません。

誰かがこれを進める方法についての指針を持っていれば大いに感謝します。

答えて

6

SurfaceViewを使い始めると、空白部分がある世界にあなた自身が移動し、あなた自身が自分の望むように描画することができます。あなたは自分ですべてを行います。つまり、スクロールを自分で実装する必要があります。それは簡単ではありませんが、それほど難しくありません。それを行うには

一つの方法は以下の通りです: - SurfaceViewを拡張し、SurfaceHolder.Callback を実装 - 利用getHolder()addCallback(この)コールバック をつかむために - スクロール動作を実装するために使用OnTouchイベント(すなわち、。応答するときは、MotionEventからx、yの位置を取得し、適切にオフセットを設定します)。

イメージの更新を処理するスレッドを実装します。ウェブの周りにこれの例があります(申し訳ありません - 今は手を出す必要はありません)。

また、オフスクリーンビットマップを使用し、通常のImageView(ビットマップのサイズに合わせてImageViewのサイズを変更し、スクロールビューに配置する)で描画します。


編集:

が、これはまだビューを取得している、それはこの時以来、私はのためのフレームワークを実装したオープンソースの小さなライブラリとして実装し、リリースしたことを指摘する価値があるかもしれないことを見て上記の機能性(他のものの中でも、ここでの多くのコメントに触発されています)。これはGithubにあります:https://github.com/micabyte/android_game

2

私は自分のゲームでこれを解決しました。私のsurfaceViewは、Googleの例であるLunarLanderの順応です。

doDrawメソッドで私自身のプライベートなキャンバスを使って私自身のプライベートビットマップを描いていることを除いて、すべて同じですが、次にそのコードの一部をキャンバスにコピーします。

Rect src = new Rect(mScrollX, mScrollY, mScrollX+mSurfaceWidth, mScrollY+mSurfaceHeight); 
Rect dst = new Rect(0, 0, mSurfaceWidth, mSurfaceHeight); 
surfaceCanvas.drawBitmap (mLevelBitmap, src, dst, null); 

のRectオブジェクト)が(先に(私のプライベートビットマップ)/ソースビットマップからピクセルを変換する方法drawBitmapスケールIはdoDraw(中に描画するために与えられたキャンバスを定義

mScrollXとYです(ビッグプライベートビットマップと比較して)表示される矩形の左上隅

mSurfaceWidth /高さだけスクロール値が許容RA内にあることを確認してください

を表示される長方形の大きさでありますnges [0、privateBitmapWidth-mSurfaceWidth]

スクロール値を自分で更新してください(onTouchEvent()などで)