Параметры позиции Android drawBitmap

Я новичок в графическом программировании Android. Я хочу поместить растровое изображение в центр моего холста. Следовательно, я использую:

public void onDraw(Canvas canvas) {
    float canvasx = (float) canvas.getWidth();
    float canvasy = (float) canvas.getHeight();

Затем я вызываю растровое изображение, которое хочу использовать,

Bitmap myBitmap = BitmapFactory.decodeResource(getResources(),
        R.drawable.myBitmap);

Затем я нахожу координаты для моего растрового изображения, используя их,

float bitmapx = (float) myBitmap.getWidth();
float bitmapy = (float) myBitmap.getHeight();

float boardPosX = (canvasx - bitmapx) / 2;
float boardPosY = (canvasy - bitmapy) / 2;

Наконец, я рисую растровое изображение, используя

canvas.drawBitmap(myBitmap, boardPosX, boardPosY, null);

Но растровое изображение не находится в центре холста. Это немного ниже положения, которое, как я считаю, должно быть центром холста.

Правильно ли получить высоту и ширину холста внутри метода onDraw()? Любая идея, что не так? Заранее спасибо.

*Редактировать :

Наконец, я заставляю это работать, изменяя

public void onDraw(Canvas canvas) {
    float canvasx = (float) canvas.getWidth();
    float canvasy = (float) canvas.getHeight();

to

public void onDraw(Canvas canvas) {
    float canvasx = (float) getWidth();
    float canvasy = (float) getHeight();

Однако я не знаю, почему это изменение решает мою проблему.


person JrL    schedule 26.07.2012    source источник


Ответы (1)


Использовать это:

float boardPosX = ((canvasx/2) - (bitmapx / 2));
float boardPosY = ((canvasy/2) - (bitmapy / 2));
person Todd Davies    schedule 26.07.2012
comment
спасибо, но тоже не работает. По-прежнему помещает растровое изображение ниже центра холста. - person JrL; 26.07.2012
comment
Есть ли какие-либо отступы по краю изображения. Нет прозрачных пикселей с одной стороны или что-то в этом роде? - person Todd Davies; 26.07.2012
comment
Есть прозрачные пиксели шириной 3-5 пикселей. Но разница между центром холста и позицией растрового изображения составляет более 15 пикселей. Дело в том, что я распечатал результат из приведенной выше формулы и допустим, что это дает мне x=10 y=20. ›› canvas.drawBitmap(myBitmap, 10, 20, null); этот правильно помещает растровое изображение в центр. Но, ›› canvas.drawBitmap(myBitmap, boardPosX, boardPosY, null); этот помещает растровое изображение немного ниже центра. - person JrL; 26.07.2012
comment
Вы можете попробовать использовать int вместо float, но я не думаю, что это проблема. Я не уверен, что еще я могу сделать без исходного кода :( - person Todd Davies; 26.07.2012
comment
Я попытался преобразовать его в int и float. Меня расстраивает, что ничего из этого не работает. Спасибо хоть. - person JrL; 26.07.2012
comment
кстати, правильно ли получить высоту и ширину холста внутри метода onDraw? - person JrL; 26.07.2012
comment
Я не уверен, задайте вопрос, кто-нибудь еще знает! - person Todd Davies; 26.07.2012