обнаружение касания для растрового изображения, нарисованного с помощью преобразований Rect - PullRequest
3 голосов
/ 07 июля 2011

Для растровых изображений, нарисованных с простыми (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);?

Кто-нибудь знает пример, где это было сделано? Я не могу найти правильные условия поиска, чтобы найти такой пример.

1 Ответ

1 голос
/ 11 августа 2011

Мне кажется, что применяется тот же метод, что и для простых координат 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;
}
...