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

Изменить размер изображения под телефон - Программирование Android

21.09.2016, 22:04. Просмотров 746. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2016, 22:04
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Изменить размер изображения под телефон (Программирование Android):

Размер изображения на разных телефонах
Здравствуйте. Рисую на канве. Размер экрана и разрешение на разных телефонах...

Изменить размер сохраняемого фото
как изменить размер сохраняемого фото через camera.takePicture? или нужно...

Программно изменить размер ImageView
public void displeisize() { DisplayMetrics displaymetrics...

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

Изменить размер шрифта в виджете
Т.к. в AppWidgetProvider не используется findViewById используют класс...

Как изменить размер ImageView из кода?
Нужно в зависимости от условий рассчитывать и менять высоту изображения...

10
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
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
Chipsov
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 3
22.09.2016, 10:19  [ТС] #3
Да, второй способ. Но можно ли обойтись без использования ImageView?
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
22.09.2016, 11:04 #4
да. конечно. то что в if это только для примера
Java
1
 Bitmap scaleBitmap=getScaledBitMapBaseOnScreenSize(originalBitmapImage);
здесь вы получаете битмап подогнаный под размер экрана. а дальше решайте что с ним делать)))
0
Frozik6k
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
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
22.09.2016, 15:59 #6
а ничего что в ваших скопипасченых примерах берется размер всего экрана?
картинка при этом может быть в лаяуте, над которым висит как минимум тулбар + статусбар
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
22.09.2016, 16:12 #7
1) в вопросе не было уточнения
2) мы хотя бы какие то варрианты ответа дали
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
22.09.2016, 16:21 #8
Цитата Сообщение от shavuz Посмотреть сообщение
1) в вопросе не было уточнения
в коде видно что наследуется от View, а значит уже не будет правильно работать, точнее методы работать будут, но размер вьюшки будет заведомо неверный (обоснование выше)
Цитата Сообщение от shavuz Посмотреть сообщение
2) мы хотя бы какие то варрианты ответа дали
лучше никакого варианта, чем неверный
0
shavuz
114 / 120 / 25
Регистрация: 29.01.2014
Сообщений: 596
22.09.2016, 16:25 #9
ну из полученного ответа человек может понять как делать и заменить размеры экрана на размеры вью. а из не полученного ответа он вообще ничего не выучит.
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
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
Chipsov
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 3
23.09.2016, 22:56  [ТС] #11
Спасибо, все советы оказались полезными!
0
23.09.2016, 22:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2016, 22:56
Привет! Вот еще темы с решениями:

Размер картинки под виджет
В виджете только ImageButton, какой должен быть размер картинки, чтобы она была...

Как изменить размер drawable animation-list в ProgressDialog
У меня есть два фрейма 800x600 в оригинале выглядит он так , но я получаю вот...

Подогнать размер текста под прямоугольник
Рисую и печатаю текст на канве. Имеется прямоугольник с заданными размерами в...

Можно ли написать веб сервер на Java для клиента на Android, имея под рукой только телефон на Android?
Уважаемые гуру программирования, если можно, пожалуйста, напишите поподробнее-...


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

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

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