Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 314
#1

Размер изображения на разных телефонах - Программирование Android

29.04.2012, 14:03. Просмотров 2680. Ответов 6
Метки нет (Все метки)

Здравствуйте. Рисую на канве. Размер экрана и разрешение на разных телефонах разное и когда я поставил приложение на телефон меньшего экрана то изображение перестало влезать. Подскажите пожалуйста можно ли заставить изображение подстраиваться под размер экрана – то есть отрисовывать его не в пикселях а в пропорциях по отношению к размеру и разрешению экрана и как это сделать? Какие классы ответственны за подгон изображения под экран?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2012, 14:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Размер изображения на разных телефонах (Программирование Android):

По-разному работает на разных телефонах - Программирование Android
Делаю программу на Android Studio. И вот такая проблема, что на моём телефоне часть программы не работает, а на другом - работает. В чём...

Одинаковый ли размер стека у разных версиях/девайсах Android? - Программирование Android
Столкнулся с проблеммой stack overflow... пришлось резать файлы на куски. Но все ровно в каждой части подхожу до предела стека. Тестирую на...

Изменить размер изображения под телефон - Программирование Android
Всем привет, у меня такая проблема в данный момент: у меня есть картинка размером 1200 x 800 и мне нужно сделать так, чтобы она одинаково...

Как сделать оптимальный размер шрифта для разных устройств - Программирование Android
Каким способом лучше подбирать размер шрифта для приложения, чтобы на всех устройствах более или менее нормально смотрелось. Как-то...

Как обеспечить одинаковый размер картинки на разных экранах Android? - Программирование Android
Как?

CustomView разные изображения для разных экранов - одна система координат - Как? - Программирование Android
Есть изображение, карта, на ней я должен в координатах размещать объекты. Изображения разные: hdpi, ldpi, mdpi и так далее. Когда я...

6
Derpy
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
29.04.2012, 14:06 #2
Нужны ресурсы для разных разрешений подробнее почитай тут http://developer.android.com/guide/practices/screens_support.html
1
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 314
30.04.2012, 09:13  [ТС] #3
Тут проблема еще в том, что у меня размер кнопок прикован к размеру изображения - то есть если у кнопки размер 52 пикселя , то и команда выполняется если палец попадает в этот диапазон, и если экран меньше, то и диапазон меньше. Похоже придется использовать гетвайт(хайт), кстати, and engine использует изображения из папки gfx, вы не знаете он подстраивает автоматически изображение под размер экрана или нет?
0
Derpy
3 / 3 / 0
Регистрация: 25.12.2011
Сообщений: 20
30.04.2012, 12:24 #4
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Тут проблема еще в том, что у меня размер кнопок прикован к размеру изображения - то есть если у кнопки размер 52 пикселя , то и команда выполняется если палец попадает в этот диапазон, и если экран меньше, то и диапазон меньше.
Используй не фиксированный диапазон а bmp.getHeight() и bmp.getWidth()
0
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 314
30.04.2012, 13:56  [ТС] #5
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Похоже придется использовать гетвэйт(хэйт)
Цитата Сообщение от Derpy Посмотреть сообщение
Используй не фиксированный диапазон а bmp.getHeight() и bmp.getWidth()
Я как раз это и хотел сделать, а как на счет andengine, у него есть возможность подстраиваться под экран?
0
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 314
26.07.2012, 09:22  [ТС] #6
Вообще бытует мнение что в папке drawable-ldpi разрешения всего экрана 320*240. Однако тут написано следующее
To generate these images, you should start with your raw resource in vector format and generate the images for each density using the following size scale:

xhdpi: 2.0
hdpi: 1.5
mdpi: 1.0 (baseline)
ldpi: 0.75
This means that if you generate a 200x200 image for xhdpi devices, you should generate the same resource in 150x150 for hdpi, 100x100 for mdpi and finally a 75x75 image for ldpi devices.
По таким расчетам,если в папке drawable-mdpi экран 480*320 ,то в папке drawable-ldpi должно быть 360*240 а не 320*240. Может в папке drawable-mdpi находится другое разрешение? Один из самых распространенных телефонов HTC Explorer black имеет разрешение 480x320 pix.
0
nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 314
01.10.2012, 13:32  [ТС] #7
Цитата Сообщение от Derpy Посмотреть сообщение
Нужны ресурсы для разных разрешений подробнее почитай тут
Вообще да, это самый легкий способ - раскидать все имиджи по папкам и дело в шляпе. Но у этого способа 2 жестких минуса - приложения станет значительно тяжелее и один и тот же графический файл надо подгонять под разные разрешения - работы значительно больше.
Если xml - то можно и без папок обойтись. Но как быть если все рисуется на Canvas (extends SurfaceView implements Runnable)? Можно поступить как в LunarLander из семплов - то есть
есть такой метод
Java
1
myBitmap=myBitmap.createScaledBitmap(myBitmap, width, height, true);
предварительно загрузить имидж
Java
1
myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.nnn555);
его запихнуть в surfaceChanged
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
33
34
35
getHolder().addCallback(new SurfaceHolder.Callback() 
        {
             /*** Уничтожение области рисования */
               public void surfaceDestroyed(SurfaceHolder holder) 
               {
                   boolean retry = true;
                    mThread.setRunning(false);
                    while (retry)
                    {
                        try
                        {
                            // ожидание завершение потока
                            mThread.join();
                            retry = false;
                        }
                        catch (InterruptedException e) { }
                    }
               }
 
               /** Создание области рисования */
               public void surfaceCreated(SurfaceHolder holder) 
               {
                   mThread.setRunning(true);
                   mThread.start();
               }
 
               /** Изменение области рисования */
              public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
               {
                   mCanvasWidth = width;
                   mCanvasHeight = height;
                   
                   myBitmap=myBitmap.createScaledBitmap(myBitmap, width, height, true);
               }
        });
но если у вас количество графических файлов больше 15 (примерно) , то приложение будет виснуть и не чего не нарисует.
Можно попытаться рисовать на других переменных
Java
1
2
3
4
5
6
7
8
Drawable myBitmap52;
 
 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
               {
                   mCanvasWidth = width;
                   mCanvasHeight = height;
                  myBitmap=myBitmap.createScaledBitmap(myBitmap, width, height, true);  
               }
и нарисовать

Java
1
2
3
4
5
6
 protected void onDraw(Canvas canvas) {         
    
     myBitmap52.setBounds(0, 0, mCanvasWidth, mCanvasHeight);
     myBitmap52.draw(canvas);
 //      canvas.drawBitmap(myBitmap52, src, dst, null);
    }
Но опять не факт что все ваши имиджи влезут. Есть еще способы, но нельзя ли как то проще решить задачу (может в манифесте чего написать). Подскажите пожалуйста как можно все графические файлы одинакового разрешения автоматически растягивать во весь экран (и не потеряется ли при этом скорость и стабильность FPS (частоты кадров)
0
Вложения
Тип файла: zip Tect.zip (1.18 Мб, 5 просмотров)
01.10.2012, 13:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2012, 13:32
Привет! Вот еще темы с ответами:

Не на всех телефонах работает adMob - Программирование Android
В эмуляторе + на 1 телефоне с android 2.3 все работает, но на двух телефонах с android 4 и выше не работает. При этом есть такое сообщение ...

Отправка СМС в телефонах с двумя картами - Программирование Android
Добрый день. Возникла проблема при отправке смс - при использовании программы с двумя сим картами смс не отправляются, при отправке...

Не на всех телефонах работает text to speech - Программирование Android
Странно попытался установить приложение на другие телефон, а на них не работает text to speech. Такое чуство, что не хватает железных...

Запретить поворот экрана на телефонах и позволить его на планшетах - Программирование Android
Как сделать, чтобы на мелких экранах (телефонах) экран был только в портретном режиме, а на больших (планшетах) - и в портретном и в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru