Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/17: Рейтинг темы: голосов - 17, средняя оценка - 4.71
nnnikotinnn995
5 / 5 / 4
Регистрация: 07.07.2011
Сообщений: 405
1

Размер изображения на разных телефонах

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

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

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

Размер картинки на разных экранах
Добрый день. Не понимаю как сделать. Есть ImageView, например, максимальная ее...

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

Изменить размер изображения под телефон
Всем привет, у меня такая проблема в данный момент: у меня есть картинка...

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

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
5 / 5 / 4
Регистрация: 07.07.2011
Сообщений: 405
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
5 / 5 / 4
Регистрация: 07.07.2011
Сообщений: 405
30.04.2012, 13:56  [ТС] 5
Цитата Сообщение от nnnikotinnn995 Посмотреть сообщение
Похоже придется использовать гетвэйт(хэйт)
Цитата Сообщение от Derpy Посмотреть сообщение
Используй не фиксированный диапазон а bmp.getHeight() и bmp.getWidth()
Я как раз это и хотел сделать, а как на счет andengine, у него есть возможность подстраиваться под экран?
0
nnnikotinnn995
5 / 5 / 4
Регистрация: 07.07.2011
Сообщений: 405
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
5 / 5 / 4
Регистрация: 07.07.2011
Сообщений: 405
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

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

CustomView разные изображения для разных экранов - одна система координат - Как?
Есть изображение, карта, на ней я должен в координатах размещать объекты....

Не на всех телефонах работает adMob
В эмуляторе + на 1 телефоне с android 2.3 все работает, но на двух телефонах с...


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

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

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