ImageView масштабирование TOP_CROP - PullRequest
84 голосов
/ 13 июня 2011

У меня есть ImageView, который отображает PNG, который имеет большее соотношение сторон, чем у устройства (в вертикальном выражении - это означает, что он длиннее). Я хочу отобразить это, сохраняя соотношение сторон, сопоставляя ширину родительского элемента и закрепляя изображение в верхней части экрана.

Проблема с использованием CENTER_CROP в качестве типа масштаба заключается в том, что он (понятно) будет центрировать масштабированное изображение вместо выравнивания верхнего края с верхним краем для просмотра изображения.

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

Я решил эту проблему, используя собственный ImageView и переопределив onDraw(Canvas) и обработав его вручную, используя canvas; проблема с этим подходом заключается в том, что 1) я беспокоюсь, что может быть более простое решение, 2) я получаю исключение виртуальной памяти при вызове super(AttributeSet) в конструкторе при попытке установить src img в 330 КБ, когда куча имеет 3 МБ бесплатно (с размером кучи 6 МБ) и не могу понять, почему.

Любые идеи / предложения / решения приветствуются:)

Спасибо

p.s. я подумал, что решение может состоять в том, чтобы использовать матричный масштаб и сделать это самому, но это похоже на ту же или большую работу, чем мое текущее решение!

Ответы [ 11 ]

0 голосов
/ 05 декабря 2015

Самое простое решение: обрезать изображение

 @Override
    public void draw(Canvas canvas) {
        if(getWidth() > 0){
            int clipHeight = 250;
            canvas.clipRect(0,clipHeight,getWidth(),getHeight());
         }
        super.draw(canvas);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...