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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
nnnikotinnn995
 Аватар для nnnikotinnn995
4 / 4 / 0
Регистрация: 07.07.2011
Сообщений: 290
02.12.2012, 21:24     Масштабирование Canvas #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).
Вложения
Тип файла: 7z Fairytale one refrain2.7z (5.16 Мб, 12 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 21:24     Масштабирование Canvas
Посмотрите здесь:

Android Масштабирование картинок из drawable
Canvas Android
canvas.rotate Android
Масштабирование ImageView в процентах от размера дисплея Android
Android Intent в Canvas
Масштабирование картинки в зависимости от разрешения экрана Android
Android Программное масштабирование
Масштабирование компонентов на андроиде Android
Масштабирование картинок, отрисованных на кнопках Android
Android Как реализовать масштабирование рисунка?
Android Обновление БД на андроид, Масштабирование иконок
Масштабирование элементов экрана Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Report_You
Сообщений: n/a
10.12.2012, 17:04     Масштабирование Canvas #2
Всегда рисую void android.graphics.Canvas.drawBitmap(Bitmap bitmap, float left, float top, Paint paint)

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

canvas.getHeight() и canvas.getWidth()
Yandex
Объявления
10.12.2012, 17:04     Масштабирование Canvas
Ответ Создать тему
Опции темы

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