Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 3

Изменить размер изображения под телефон

21.09.2016, 22:04. Показов 3301. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, у меня такая проблема в данный момент: у меня есть картинка размером 1200 x 800 и мне нужно сделать так, чтобы она одинаково смотрелась на разных смартфонах и планшетах, т.е. чтобы изображение само подгонялось под разрешение экрана. Как это сделать при помощи bitmap и canvas?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class DrawView extends View {
private Bitmap bitmap1;
private Bitmap bitmapSource1;
public DrawView(Context context) {
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        bitmapSource1 = BitmapFactory.decodeResource(getResources(), R.drawable.background);
        bitmap1 = Bitmap.createBitmap(bitmapSource1, 0, 0, 1280, 800, matrix, true);
}
 @Override
    public  void  onDraw(Canvas canvas) {
        canvas.drawBitmap(bitmap1, 0, 0, paint);
}
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.09.2016, 22:04
Ответы с готовыми решениями:

Как изменить размер изображения под мобильные устройства
Мне нужно в статье между абзацами изменить размер изображения от 320 до 980 включно поставить ширину 80%. Пробовал в style.css не...

Можно ли подогнать размер браузера под размер фонового изображения
Здравствуйте! Подскажите как сделать, чтоб фоновое изображение подходило по ширине к ширине окна браузера? Чтоб оно не дублировалось и не...

Подогнать размер изображения под размер PictureBox
Как изменить размер изображения при открытии? А то когда я добавляю в пикчер бокс, они обычно бывают не того разрешения и либо вылазят...

10
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
22.09.2016, 09:03
Что значит одинаково смотрелась? сохраняла исходный размер или растягивалась в отношении размера экрана? если второй варриант то вам нужно копировать исходное изображение в новое учитывая размеры экрана.
Вот пример:
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
private Bitmap getScaledBitMapBaseOnScreenSize(Bitmap bitmapOriginal){
 
    Bitmap scaledBitmap=null;
    try {
        DisplayMetrics metrics = new DisplayMetrics();
        getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
 
 
        int width = bitmapOriginal.getWidth();
        int height = bitmapOriginal.getHeight();
 
        float scaleWidth = metrics.scaledDensity;
        float scaleHeight = metrics.scaledDensity;
 
        // create a matrix for the manipulation
        Matrix matrix = new Matrix();
        // resize the bit map
        matrix.postScale(scaleWidth, scaleHeight);
 
        // recreate the new Bitmap
        scaledBitmap = Bitmap.createBitmap(bitmapOriginal, 0, 0, width, height, matrix, true);
    }
    catch (Exception e){
        e.printStackTrace();
    }
    return scaledBitmap;
}
а вот так вызываете функцию:

Java
1
2
3
4
 Bitmap scaleBitmap=getScaledBitMapBaseOnScreenSize(originalBitmapImage);
    if(scaleBitmap!=null) {
    imageView.setImageBitmap(scaleBitmap);
    }
0
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 3
22.09.2016, 10:19  [ТС]
Да, второй способ. Но можно ли обойтись без использования ImageView?
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
22.09.2016, 11:04
да. конечно. то что в if это только для примера
Java
1
 Bitmap scaleBitmap=getScaledBitMapBaseOnScreenSize(originalBitmapImage);
здесь вы получаете битмап подогнаный под размер экрана. а дальше решайте что с ним делать)))
0
 Аватар для Frozik6k
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 51
22.09.2016, 15:50
Можно вот так:
Java
1
2
3
4
5
6
7
    private Bitmap getBitmapFullScreen(Bitmap bitmap){
        DisplayMetrics metrics = new DisplayMetrics();
        getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
        Bitmap bitmapOutput = Bitmap.createScaledBitmap(bitmap, metrics.widthPixels,
                metrics.heightPixels, false);
        return bitmapOutput;
    }
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
22.09.2016, 15:59
а ничего что в ваших скопипасченых примерах берется размер всего экрана?
картинка при этом может быть в лаяуте, над которым висит как минимум тулбар + статусбар
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
22.09.2016, 16:12
1) в вопросе не было уточнения
2) мы хотя бы какие то варрианты ответа дали
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
22.09.2016, 16:21
Цитата Сообщение от shavuz Посмотреть сообщение
1) в вопросе не было уточнения
в коде видно что наследуется от View, а значит уже не будет правильно работать, точнее методы работать будут, но размер вьюшки будет заведомо неверный (обоснование выше)
Цитата Сообщение от shavuz Посмотреть сообщение
2) мы хотя бы какие то варрианты ответа дали
лучше никакого варианта, чем неверный
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
22.09.2016, 16:25
ну из полученного ответа человек может понять как делать и заменить размеры экрана на размеры вью. а из не полученного ответа он вообще ничего не выучит.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
22.09.2016, 16:52
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
36
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
 
public class DrawView extends View {
 
    private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    private Bitmap scaledBitmap;
 
    public DrawView(Context context) {
        super(context);
    }
 
    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        if (w == 0 || h == 0) return;
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inScaled = false;
        final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background, options);
        scaledBitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
    }
 
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(scaledBitmap, 0, 0, paint);
    }
}
это без учета смены ориентации и отношения сторон
0
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 3
23.09.2016, 22:56  [ТС]
Спасибо, все советы оказались полезными!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.09.2016, 22:56
Помогаю со студенческими работами здесь

Как изменить размер TImage под текущий размер Picture ?
Доброго времени суток! Есть задача (Delphi 7). В TImage загружается Picture с условиями: Center := True; Proportional := True; ...

Изменить размер изображения
Как изменить размер изображения в pictureBox?

Изменить размер изображения
Думаю тема избита на нет, но я не могу догнать. Один модератор подробно показал как делать в этой теме. я сделал так function...

Изменить размер изображения
Подскажите пожалуйста как сделать ,что бы размер изображения менялся вместе с размером окна. Например что бы игра растягивалась вместе с...

Изменить размер изображения
Здравствуйте! Помогите решить задачу, мой код проходит только половину тестов. Условия:При обработке изображений часто встречается...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru