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

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

21.09.2016, 22:04. Показов 2047. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2016, 22:04
Ответы с готовыми решениями:

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

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

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

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

__________________

Записывайтесь на профессиональные курсы Android-разработчиков
10
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
22.09.2016, 09:03 2
Что значит одинаково смотрелась? сохраняла исходный размер или растягивалась в отношении размера экрана? если второй варриант то вам нужно копировать исходное изображение в новое учитывая размеры экрана.
Вот пример:
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  [ТС] 3
Да, второй способ. Но можно ли обойтись без использования ImageView?
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
22.09.2016, 11:04 4
да. конечно. то что в if это только для примера
Java
1
 Bitmap scaleBitmap=getScaledBitMapBaseOnScreenSize(originalBitmapImage);
здесь вы получаете битмап подогнаный под размер экрана. а дальше решайте что с ним делать)))
0
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 51
22.09.2016, 15:50 5
Можно вот так:
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
2881 / 2293 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
22.09.2016, 15:59 6
а ничего что в ваших скопипасченых примерах берется размер всего экрана?
картинка при этом может быть в лаяуте, над которым висит как минимум тулбар + статусбар
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
22.09.2016, 16:12 7
1) в вопросе не было уточнения
2) мы хотя бы какие то варрианты ответа дали
0
2881 / 2293 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
22.09.2016, 16:21 8
Цитата Сообщение от shavuz Посмотреть сообщение
1) в вопросе не было уточнения
в коде видно что наследуется от View, а значит уже не будет правильно работать, точнее методы работать будут, но размер вьюшки будет заведомо неверный (обоснование выше)
Цитата Сообщение от shavuz Посмотреть сообщение
2) мы хотя бы какие то варрианты ответа дали
лучше никакого варианта, чем неверный
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
22.09.2016, 16:25 9
ну из полученного ответа человек может понять как делать и заменить размеры экрана на размеры вью. а из не полученного ответа он вообще ничего не выучит.
0
2881 / 2293 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
22.09.2016, 16:52 10
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  [ТС] 11
Спасибо, все советы оказались полезными!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2016, 22:56

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

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

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

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


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

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

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