Механизм кадрирования ImageView наилучший подход - PullRequest
0 голосов
/ 29 января 2020

Каким должен быть идеальный способ обрезки растрового изображения 100 X 100 с левой стороны / центральной стороны / правой стороны в Android с использованием системы координат?

Допустим, обрезка изображения с левой стороны обеспечит 1/3 части изображения, начиная с координаты 0,0 (слева внизу) до 33 100 [справа вверху]

обрезанное изображение справа будет от 66,0 до 100, 100

центральная сторона обрезанного изображения будет от 33,0 до 66,0

Ответы [ 3 ]

0 голосов
/ 06 февраля 2020

Я думаю, что самый простой способ - создать растровое изображение и обрезать его, создав новое растровое изображение:

Bitmap bitmap = ...; // your Bitmap
Bitmap croppedBitmapLeft;
Bitmap croppedBitmapCenter;
Bitmap croppedBitmapRight;

// Left side
croppedBitmapLeft = Bitmap.createBitmap(bitmap, 0, 0, 33, 100);
croppedBitmapCenter = Bitmap.createBitmap(bitmap, 33, 0, 33, 100);
croppedBitmapRight = Bitmap.createBitmap(bitmap, 66, 0, 33, 100);

См. API Bitmap.createBitmap ()

0 голосов
/ 10 февраля 2020

Если вы хотите bitmap обрезать, попробуйте Fresco library.

Или, если у вас есть достаточно идей о матрице изображений, вы можете попробовать это:

final ImageView imageView = (ImageView) findViewById(R.id.imageView);
final Matrix matrix = imageView.getImageMatrix();
final float imageWidth = imageView.getDrawable().getIntrinsicWidth();
final int screenWidth = getResources().getDisplayMetrics().widthPixels;
final float scaleRatio = screenWidth / imageWidth;
matrix.postScale(scaleRatio, scaleRatio);
imageView.setImageMatrix(matrix);

Или вы можете настроить свой `ImageView 'как:

public class ImageViewTopCrop extends ImageView
{
    public ImageViewTopCrop(Context context)
    {
        super(context);
        setScaleType(ScaleType.MATRIX);
    }

    public ImageViewTopCrop(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        setScaleType(ScaleType.MATRIX);
    }

    public ImageViewTopCrop(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        setScaleType(ScaleType.MATRIX);
    }

    @Override
    protected boolean setFrame(int l, int t, int r, int b)
    {
        Matrix matrix = getImageMatrix();
        float scaleFactor = getWidth()/(float)getDrawable().getIntrinsicWidth();
        matrix.setScale(scaleFactor, scaleFactor, 0, 0);
        setImageMatrix(matrix);
        return super.setFrame(l, t, r, b);
    }
}
0 голосов
/ 04 февраля 2020

Вы можете посмотреть на Glide или Fresco реализацию урожая. Фреска может сделать пользовательский урожай

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...