Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Как отобразить определенную часть изображения в ImageView?

#android #picasso #android_imageview


У меня есть список фотографий, который я отображаю в ListView с помощью адаптера. 

Сейчас я отображаю фото таким образом:

PhotoAdapter.ViewHolder viewHolder;
        if (view == null) {
            view = inflater.inflate(R.layout.list_view_photo_item, viewGroup, false);

            viewHolder = new PhotoAdapter.ViewHolder(view);
            view.setTag(viewHolder);
        } else {
            viewHolder = (PhotoAdapter.ViewHolder) view.getTag();
        }

        picasso.load(photo.getImageUrl())
                .placeholder(R.drawable.bg_small_11)
                .into(viewHolder.image);


Это обычное отображение. А у меня стоит задача отобразить фото по указанным координатам
(левая верхняя, правая верхняя, левая нижняя и  правая нижняя точка). То есть я не
хочу отображать всё фото, а только этот кусок фото, который пользователь раньше выбрал
как превью, и я хочу отображать именно его. Сервер мне возвращает полностью всё фото
+ координаты (в PX) этого превью. Кто, что может посоветовать? 
    


Ответы

Ответ 1



Метод transform и интерфейс Transformation позволяют изменить изображение как душе угодно: picasso.load(photo.getImageUrl()) .placeholder(R.drawable.bg_small_11) .transform(new Transformation { @Override public Bitmap transform(Bitmap source) { Bitmap result = Bitmap.createBitmap(source, x, y, width, height); if (result != source) source.recycle(); return result; } @Override public String key() { return "crop()"; } }) .into(viewHolder.image);

Ответ 2



Вам нужно получить Bitmap и создать его обрезанную версию. У вручную установить в ImageView. С Picasso это можно сделать примерно так: Picasso.with(context) .load(photo.getImageUrl()) .placeholder(R.drawable.bg_small_11) .into(new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { Bitmap croppedBitmap = Bitmap.createBitmap( bitmap, xCoord, yCoord, width, height); // Координаты, полученные с сервера viewHolder.image.setImageBitmap(croppedBitmap); } @Override public void onBitmapFailed(Drawable errorDrawable) { } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } }); }

Комментариев нет:

Отправить комментарий