С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 130
1

canvas.rotate

14.06.2013, 03:20. Показов 1898. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Данный код работает не стабильно на разных устройствах.

Под разные плотности экрана (ldpi, mdpi, hdpi, xhdpi) в каждую папку был положен файл с возрастающим разрешением как сказано в developer.android.com 75px-100px-150px-200px
Но, протестировав на эмуляторе устройство (mdpi 5.1" 480*800) и устройство (mdpi 3.2" 320*480) получила смещение во вращении. Код работает стабильно без разбивки файла по папкам drawable на устройствах ldpi и hdpi до 4х дюймов, даже одно и тоже разрешение экрана 480*800 на устройстве 4" hdpi - работает, а на 5.1" mdpi -нет.

Подскажите, пожалуйста, что не так в этом коде? И как сделать чтоб на всех аппаратах работало стабильно?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int rotation = 1;
               
        private void draw() {
            SurfaceHolder holder = getSurfaceHolder();
            Canvas c = null;
            try {
                c = holder.lockCanvas();
                int w = c.getWidth();//берем ширину экрана
                int h = c.getHeight();//высоту
                if (c != null) {
                    Paint p = new Paint();
                    p.setAntiAlias(false);
                    rotation += 6;
                    if (rotation > 360) {rotation = 1;}
                    
c.drawBitmap(bg, 0, 0, p);//фон
c.rotate(rotation, w*100/228, h*100/216); //44% от ширины и 46% от высоты, соответствует 210, 370 на устройстве с разрешением 480*800px
c.drawBitmap(pic, w*100/228-(w*156/1000), h*100/216-(w*156/1000), p);//соотв. 135,295  (156 это разница между верхней и этой строчкой (210-135) деленное на ширину экрана)     pic - картинка 100*100px
c.rotate(-rotation, w*100/228, h*100/216); //возвращаем холст
                }
            } finally {
                if (c != null)
                    holder.unlockCanvasAndPost(c);
            }
            mHandler.removeCallbacks(mUpdateDisplay);
            if (mVisible) {
                mHandler.postDelayed(mUpdateDisplay, 20);
            }
 
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2013, 03:20
Ответы с готовыми решениями:

Canvas
Хочу разобраться в канвасе. Полазил по интернету, не нашел никакого простейшего материала про...

Потоки. Canvas
Добрый день. Подскажите, как реализовать обработку изменения цвета с помощью потоков? Не могу...

Использование canvas
Интересует насколько глупо использовать слудующий метод рисование и как тогда быть. Есть игра где...

Canvas и Button
можно ли в канвасе на холсте разместить view-элементы? кнопки к примеру или textview.

3
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.06.2013, 04:13 2
Java
1
2
c.rotate(rotation, w/2, h/2);
c.drawBitmap(pic, 0, 0, p);
0
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 130
16.06.2013, 21:04  [ТС] 3
V0v1k, и что мне прикажете с Вашим кодом делать?
Задача ставилась так: нарисовать картинку 100*100px в 44% справа от ширины экрана и в 44% сверху от высоты экрана любого устройства будь то большой планшет или самый маленький смартфон. И повернуть эту картинку (rotation += 6) вокруг своей оси. Думала в комментариях было ясно написано...
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.06.2013, 21:31 4
а, ну здесь вращается канвас, поэтому немного другой результат получается чем вы ожидаете
попробуйте поэкспериментировать с методом drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint), matrix используйте для рутейшена.

Добавлено через 16 минут
а, ну так вы вращаете канвас не вокруг середины рисунка, а вокруг его левого верхнего угла.
Java
1
c.rotate(rotation, w*100/228 + imageW/2, h*100/216 + imageH/2);
0
16.06.2013, 21:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2013, 21:31
Помогаю со студенческими работами здесь

Intent в Canvas
в private void draw нужно использовать переменную T из соседнего класса я использую, строка с...

Столкновения на canvas
Здравствуйте. Задача определить позиции столкновения для 2 объектов-рисунков .png, которые при этом...

вылетает canvas
Здравствуйте, такой вопрос. сделал приложение потестил много раз выложил в маркет прошла неделя в...

Android canvas
Как передать параметры в класс с методом onDraw? Этот самый класс мне нужно вызвать в xml! я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru