1

私はアンドロイドを使って私の研究から何かを開発しようとしています。しかし、私はコーディングの人ではないので、どうすればいいのか分からずに苦労しています。自分の機能を実現する方法を見つけましたが、自分では解決できない問題に直面しています。皆さんが私を助けてくれれば、それは素晴らしいことです。

画面サイズよりも大きな画像を表示し、画像内の特定の色のピクセルに触れると音を鳴らしたり振動させたりしようとしています。画像の最初のインスタンス (つまり、アプリケーションを起動すると表示される画像) に対してこれを実行できましたが、パンするとすぐに機能しません。たとえば、画像の画面中央に緑色のピクセルがあり、パンした後、左に移動しました。緑のピクセルに触れると振動するようにしています。緑色が中央にあるとデバイスが振動しますが、パンした後は更新されません。色違いがあっても画面中央をタッチすると振動します。プログラムが画面座標を修正し、画像座標を使用していないと推測しています。event.getX、getRawX を使ってみました。ただし、どちらも画面座標のみを参照しています。私の質問は

*画面座標ではなく画像座標をターゲットにする方法はありますか?

*そうでない場合、他にどのようにこのタスクを達成できますか?

4

1 に答える 1

1

まあ、意味論的な話ですが、「画像座標」という概念はありません。

考えてみると、タッチは最初にハードウェアによって処理されます。ハードウェアは、物理的なピクセルを除いて、何に触れているかをまったく認識していません。これが Android に報告されます。

Android は、その画像ピクセルの塊が何であるかを認識していません。画面に対するピクセル内の特定の画像の位置は、アプリ内でのみ意味を持ちます。タッチ イベントはアプリの外部で発生するため、2 つを関連付ける方法はありません....

....あなたが関連付けをしない限り。タッチ イベントに応答して、コード内の画像を移動しました。タッチ イベントを処理するクラスで定義された変数を使用して、どれだけ移動したかを記憶し、それを後続のタッチ イベントで指定された x と y へのオフセットとして使用します。

例: 画像を 200 ピクセル左にパンします。タッチされた物理的なピクセルが画像の中心の右側に 200 あるため、中心のタッチは画像の中心のピクセル (x/2) + 200 に対応します。

[編集] これについてもう少し考えてみると、マトリックスを使用して画像をパンしている可能性があります。そうでない場合は、Matrix クラスを確認してください。そうであれば、いつでもマトリックスをクエリして、x と y のパンの合計量をいつでも取得できます。スケーリングや回転も行っている場合、事態はもう少し複雑になりますが、それは新しい質問に値します。

[編集]

x、y で色を取得するには:

int pixel = bitmap.getPixel(x,y);

int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);
于 2012-11-08T23:36:35.133 に答える