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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Chipsov
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 3
#1

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

21.09.2016, 22:04. Просмотров 420. Ответов 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):

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

Title. Изменить размер текста - Программирование Android
Здравствуйте. Какой атрибут можно использовать, что бы установить свой размер текста "Теория"? <?xml version="1.0" encoding="utf-8"?> ...

Программно изменить размер ImageView - Программирование Android
public void displeisize() { DisplayMetrics displaymetrics = getResources().getDisplayMetrics(); int...

Изменить размер шрифта в виджете - Программирование Android
Т.к. в AppWidgetProvider не используется findViewById используют класс RemoteView. RemoteViews rv= new...

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

Как изменить размер ImageView из кода? - Программирование Android
Нужно в зависимости от условий рассчитывать и менять высоту изображения ImageView. Так, как относительно этой ImageView позиционируются...

10
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
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
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
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
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,923
Завершенные тесты: 1
22.09.2016, 15:59 #6
а ничего что в ваших скопипасченых примерах берется размер всего экрана?
картинка при этом может быть в лаяуте, над которым висит как минимум тулбар + статусбар
0
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
22.09.2016, 16:12 #7
1) в вопросе не было уточнения
2) мы хотя бы какие то варрианты ответа дали
0
Pablito
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,923
Завершенные тесты: 1
22.09.2016, 16:21 #8
Цитата Сообщение от shavuz Посмотреть сообщение
1) в вопросе не было уточнения
в коде видно что наследуется от View, а значит уже не будет правильно работать, точнее методы работать будут, но размер вьюшки будет заведомо неверный (обоснование выше)
Цитата Сообщение от shavuz Посмотреть сообщение
2) мы хотя бы какие то варрианты ответа дали
лучше никакого варианта, чем неверный
0
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
22.09.2016, 16:25 #9
ну из полученного ответа человек может понять как делать и заменить размеры экрана на размеры вью. а из не полученного ответа он вообще ничего не выучит.
0
Pablito
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,923
Завершенные тесты: 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
Привет! Вот еще темы с ответами:

Размер картинки под виджет - Программирование Android
В виджете только ImageButton, какой должен быть размер картинки, чтобы она была в квадрате 1х1 (нормально помещалась, полностью, и была...

Подогнать размер текста под прямоугольник - Программирование Android
Рисую и печатаю текст на канве. Имеется прямоугольник с заданными размерами в пикселях (например, 150 на 80). И есть строка с текстом. ...

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

Как сделать так, чтобы мобильное приложение автоматически подстраивалось под размер экрана? - Программирование Android
В Android Studio мы же под определенную диагональ создаём приложение (один эмулятор).. Как при разработке сделать так, чтобы мобильное...


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

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

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