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

Масштабирование Canvas

02.12.2012, 21:24. Просмотров 3642. Ответов 1
Метки нет (Все метки)

Здравствуйте. Задача растянуть все изображения во весь экран- SurfaceView (не зависимо от разрешения телефона и соотношения его сторон), все изображения одного разрешения и находятся в одной общей для всех разрешений папке – drawable.
Есть разные способы подгона изображения, но при большом количестве файлов не все работают.
На сколько я смог разобраться – лучше всего рисовать на канве методом
Java
1
2
3
Rect src;//кусок снимка
    Rect dst;// размер его на экране
canvas.drawBitmap(myBitmap, src, dst, null);
Для этого нужно создать в классе с контекстной загрузкой файлов конструктор
с тремя параметрами
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
int heightWindown,widthWindown,heightWindown2,widthWindown2;    
public GameView(Context context, int w, int h){
super(context);
        this.mContext = context;
        mThread = new GameThread(this);
        this.heightWindown = h;// высота дисплея телефона 
        this.widthWindown = w;
heightWindown2 = myBitmap.getHeight();  //высота фрагмента снимка
        widthWindown2 = myBitmap.getWidth();
this.src = new Rect(0, 0, widthWindown2,heightWindown2);//кусок снимка
         this.dst = new Rect(0,0,widthWindown,heightWindown);// размер его на экране
myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.nnn);    
}
и вызвать его в setContentView придавая данным параметрам соответствующие значения (в том числе высоту и ширину дисплея)
Java
1
 setContentView(new GameView(this, getWindowManager().getDefaultDisplay().getWidth(), getWindowManager().getDefaultDisplay().getHeight()));
Если не загружать музыкальные файлы то все работает нормально. Но если загружать, то перед самым создание surface возникает пауза - в течение3-4 секунд стоит черный экран а потом все рисуется.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public GameView(Context context, int w, int h){
super(context);
        this.mContext = context;
        mThread = new GameThread(this);
        this.heightWindown = h;// высота дисплея телефона 
        this.widthWindown = w;
heightWindown2 = myBitmap.getHeight();  //высота фрагмента снимка
        widthWindown2 = myBitmap.getWidth();
this.src = new Rect(0, 0, widthWindown2,heightWindown2);//кусок снимка
         this.dst = new Rect(0,0,widthWindown,heightWindown);// размер его на экране
myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.nnn);
//                                                               музыка и звуки
this.track = MediaPlayer.create(context, R.raw.n555);
sounds = new SoundPool(10, AudioManager.STREAM_MUSIC,0);
acomnpAn = sounds.load(context, R.raw.acomnpan, 1); 
//и т.д.    
}
Однако этого не происходит, если все изображения раскидать по разным папкам и рисовать их фиксировано
Java
1
canvas.drawBitmap(myBitmap, x, y, null);
Как вы думаете почему возникает пауза и как это можно исправить?
(Во вложение при нажатие на кнопку старт вы переходите на SurfaceView).
0
Вложения
Тип файла: 7z Fairytale one refrain2.7z (5.16 Мб, 14 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 21:24
Ответы с готовыми решениями:

Программное масштабирование
Доброе время суток. Возникла проблема с масштабированием при поддержки разных...

Масштабирование картинки
Как сделать чтобы пользователю можно было картинку увеличивать и уменьшать...?

Масштабирование компонентов на андроиде
Сейчас пытаюсь освоить андроид 2.3.3 (но если окажется, что там все плохо, то...

Масштабирование элементов экрана
Здравствуйте. Такой вопрос. Допустим есть несколько рядов с кнопками на...

Масштабирование картинок из drawable
Здравствуйте! Суть в следующем, есть самодельное меню из картинок, при...

1
Report_You
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 2
10.12.2012, 17:04 2
Всегда рисую void android.graphics.Canvas.drawBitmap(Bitmap bitmap, float left, float top, Paint paint)

и растягивается на полную. Для подгонки можно использовать значения

canvas.getHeight() и canvas.getWidth()
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 17:04

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

Как реализовать масштабирование рисунка?
Здравствуйте. Нужно нарисовать схему объекта, аналогия как в дубль гисе, чтобы...

Масштабирование картинок, отрисованных на кнопках
Здравствуйте. Есть кнопки с отрисовнными на них картинками...


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

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

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