2013-08-03 4 views
8

Я пытаюсь повернуть холст вокруг центра экрана, чтобы получить координаты (0,0) в правом нижнем углу.Android: вращайте холст вокруг центра экрана

Это, как я это делаю:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 
int height = display.getHeight(); 
canvas.rotate(180, width/2, height/2); 

Он вращается правильно, и все прекрасно в АДВ с уровнем API 17. Но на AVD с уровнем API 8 (0,0) координата появляется в неправильном месте. Перед вращением картина установки на весь экран на этом устройстве тоже, но теперь это выглядит следующим образом:

enter image description here

, что является причиной этой проблемы?

* EDIT!

Проблема решается путем поворота холста вокруг своей средней точки:

canvas.rotate(180,canvas.getWidth()/2,canvas.getHeight()/2); 

Но все-таки, почему не в предыдущей версии работы со старыми API,?

ответ

0

Это не всегда необходимо для Canvas и Display одинакового размера. Display.getWidth() устарел, и вместо этого предлагается использовать Display.getSize(). От documentation:

Получает размер дисплея в пикселях.

Обратите внимание, что эта величина не должна использоваться для вычисления макетов, так как устройство, как правило, имеют художественное оформление экрана (например, в строке состояния) по краям дисплея, которые уменьшают количество приложений пространства, доступного от размер возвращен здесь. Вместо макетов вместо используйте размер окна.

Таким образом, в случае canvas матрицы преобразования, всегда использовать canvas в качестве ссылки, а не дисплей или окно, так как холст даст точное значение. Поэтому, чтобы повернуть холст вокруг центра, вам нужен центр canvas.

Центр холста: (canvas.getWidth()/2 , canvas.getHeight()/2)

Смежные вопросы