ImageView подходит ширина, начать сверху - PullRequest
0 голосов
/ 10 мая 2018

У меня есть изображение, которое должно соответствовать ширине, но так как оно длинное, мне нужно, чтобы верхняя часть была видимой, я попытался использовать ImageView:

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@mipmap/day_length_background"
    android:scaleType="centerCrop"
    android:adjustViewBounds="true"
    />

Но результат:

enter image description here

Я не могу использовать fitXY, потому что это меняет соотношение сторон.

Мне нужно, чтобы это было так enter image description here

Ответы [ 4 ]

0 голосов
/ 10 мая 2018

Вы также можете сократить ваш вид пополам enter image description here

или, возможно, использовать пользовательскую матрицу в java

if (imageView.getScaleType() != ImageView.ScaleType.MATRIX) {
                    imageView.setScaleType(ImageView.ScaleType.MATRIX);
                }
                Matrix m = imageView.getImageMatrix();
                int dw = imageView.getDrawable().getIntrinsicWidth();
                int dh = imageView.getDrawable().getIntrinsicHeight();
                int msWidth, msHeight;
                float scalew, scaleh;

                Display display = activity.getWindowManager().getDefaultDisplay();
                Point size = new Point();
                display.getSize(size);
                msWidth = size.x;
                if (imageView.getLayoutParams().width == ViewGroup.LayoutParams.WRAP_CONTENT) {
                    msWidth = dw < msWidth ? dw : msWidth;
                }
                scalew = (float) msWidth / dw;
                msHeight = size.y;
                if (imageView.getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT) {
                    msHeight = dh < msHeight ? dh : msHeight;
                }
                scaleh = (float) msHeight / dh;
                float scale = Math.max(scalew, scaleh);

                m.setScale(scale, scale);
                m.postTranslate(0, 0);
                imageView.setImageMatrix(m);
            }
0 голосов
/ 10 мая 2018

Попробуйте scaleType="fitStart"

Масштабирование изображения с использованием Matrix.ScaleToFit.START

Matrix.ScaleToFit.START: вычислить шкалу, которая будет поддерживать оригинальное соотношение сторон src, но также обеспечит полное соответствие src внутри дст. По крайней мере одна ось (X или Y) будет соответствовать точно. СТАРТ выравнивает результат к левому и верхнему краям dst.

Ссылка здесь: https://robots.thoughtbot.com/android-imageview-scaletype-a-visual-guide#fit_start

0 голосов
/ 10 мая 2018

Поместите изображение в папку drawable и поместите изображение на фон макета, т.е.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/image">
0 голосов
/ 10 мая 2018

centercrop это ваша проблема.Попробуйте fitXY, он должен работать, если соотношение сторон примерно одинаковое.

...