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

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

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

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

21.09.2016, 22:04. Просмотров 299. Ответов 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);
}
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
shavuz
99 / 105 / 19
Регистрация: 29.01.2014
Сообщений: 527
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);
    }
Chipsov
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 3
22.09.2016, 10:19  [ТС]     Изменить размер изображения под телефон #3
Да, второй способ. Но можно ли обойтись без использования ImageView?
shavuz
99 / 105 / 19
Регистрация: 29.01.2014
Сообщений: 527
22.09.2016, 11:04     Изменить размер изображения под телефон #4
да. конечно. то что в if это только для примера
Java
1
 Bitmap scaleBitmap=getScaledBitMapBaseOnScreenSize(originalBitmapImage);
здесь вы получаете битмап подогнаный под размер экрана. а дальше решайте что с ним делать)))
Frozik6k
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 50
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;
    }
Pablito
2420 / 1865 / 583
Регистрация: 12.05.2014
Сообщений: 6,604
Завершенные тесты: 1
22.09.2016, 15:59     Изменить размер изображения под телефон #6
а ничего что в ваших скопипасченых примерах берется размер всего экрана?
картинка при этом может быть в лаяуте, над которым висит как минимум тулбар + статусбар
shavuz
99 / 105 / 19
Регистрация: 29.01.2014
Сообщений: 527
22.09.2016, 16:12     Изменить размер изображения под телефон #7
1) в вопросе не было уточнения
2) мы хотя бы какие то варрианты ответа дали
Pablito
2420 / 1865 / 583
Регистрация: 12.05.2014
Сообщений: 6,604
Завершенные тесты: 1
22.09.2016, 16:21     Изменить размер изображения под телефон #8
Цитата Сообщение от shavuz Посмотреть сообщение
1) в вопросе не было уточнения
в коде видно что наследуется от View, а значит уже не будет правильно работать, точнее методы работать будут, но размер вьюшки будет заведомо неверный (обоснование выше)
Цитата Сообщение от shavuz Посмотреть сообщение
2) мы хотя бы какие то варрианты ответа дали
лучше никакого варианта, чем неверный
shavuz
99 / 105 / 19
Регистрация: 29.01.2014
Сообщений: 527
22.09.2016, 16:25     Изменить размер изображения под телефон #9
ну из полученного ответа человек может понять как делать и заменить размеры экрана на размеры вью. а из не полученного ответа он вообще ничего не выучит.
Pablito
2420 / 1865 / 583
Регистрация: 12.05.2014
Сообщений: 6,604
Завершенные тесты: 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);
    }
}
это без учета смены ориентации и отношения сторон
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2016, 22:56     Изменить размер изображения под телефон
Еще ссылки по теме:
Android Подогнать размер текста под прямоугольник
Android Как сделать так, чтобы мобильное приложение автоматически подстраивалось под размер экрана?
Android Как изменить размеры меток карты OSM под Андроид
Android Как подгонять размер диалоговых окон по размер экрана?
Android Размер кнопок, не пойму что влияет на их размер

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

Или воспользуйтесь поиском по форуму:
Chipsov
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 3
23.09.2016, 22:56  [ТС]     Изменить размер изображения под телефон #11
Спасибо, все советы оказались полезными!
Yandex
Объявления
23.09.2016, 22:56     Изменить размер изображения под телефон
Ответ Создать тему
Опции темы

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