3

単純な (x,y) 座標で描画されたビットマップの場合、

float _x = x - (bitmap.getWidth() / 2);
float _y = y - (bitmap.getHeight() / 2);
canvas.drawBitmap(bitmap, _x, _y, null);

ビットマップがタッチされたかどうかを検出できます。

で画面にビットマップを描画しています

    dest = new Rect(0,0,0,0);
    src = new Rect(0,0,0,0);
    mSpriteHeight = (int) (sprite_pixel_height * mScale + 0.5f);
    mSpriteWidth = (int) (sprite_pixel_width * mScale + 0.5f);
    src.top = 0;
    src.left = 0;
    src.bottom = mSpriteHeight;
    src.right = mSpriteWidth;
    dest.top = (int) (_x * mScale);
    dest.bottom = (int) ((_x + mSpriteHeight) * mScale);
    dest.left = (int) (_y * mScale);
    dest.right = (int) ((_y + mSpriteWidth) * mScale);
    canvas.drawBitmap(bitmap, src, dest, null);

「この関数はビットマップに関連付けられた密度を無視するため、画面密度を取り入れようとして います。...そのため、適切な倍率が適用されている必要があります。」

翻訳されたビットマップへのタッチを検出できませんでした。を使用して同様の翻訳を行う必要がありますが、道mScaleに迷っています。

オリジナルでsrc と dest を定義するより良い方法はありcanvas.drawBitmap(bitmap, src, dest, null);ますか?

これが行われた例を知っている人はいますか?そのような例を見つけるための適切な検索用語が見つからないようです。

4

1 に答える 1

1

単純なx、y座標と同じ方法が適用されるようです。Rect dest の座標とサイズを使用して、ビットマップがタッチされたかどうかを計算するだけです。

つまり、次のようなことを行う必要があります。

public boolean picked(Rect dest, int touchX, int touchY) {
     if(touchX > dest.left && touchX < dest.left + dest.width() &&
        touchY > dest.top && touchY < dest.top + dest.height())
            return true;
     return false;
}
于 2011-08-11T19:02:07.883 に答える