Возьмите очень широкое изображение и обрежьте его до определенного размера c - PullRequest
1 голос
/ 17 марта 2020

У меня очень широкое изображение внутри моего ViewHolder. Поведение ImageView по умолчанию с использованием centerCrop такое, если изображение выглядит следующим образом -

enter image description here

Но я хочу обрезать его, чтобы оно было сосредоточено на левой стороне вот так -

enter image description here

Необходимо учитывать тот факт, что размер этого виджета очень часто изменяется.

Вот мой ViewHolder XML и адаптер. Обратите внимание, что я использовал fitXY только для демонстрации, это не то, что я на самом деле хочу, поэтому не стесняйтесь игнорировать эту строку. -

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/vendors_row_item_root_layout"
    android:layout_width="152dp"
    android:layout_height="match_parent">

    <androidx.cardview.widget.CardView
        android:id="@+id/search_image_contact_cardview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="5dp"
        app:cardCornerRadius="8dp"
        tools:layout_height="160dp">

        <ImageView
            android:id="@+id/vendors_row_item_imageview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="fitXY"
            tools:src="@drawable/kikiandggcover" />


    </androidx.cardview.widget.CardView>


</androidx.constraintlayout.widget.ConstraintLayout>

Адаптер -

class VendorAdapter(private val miniVendorModels: List<MiniVendorModel>, private val context: Context) : RecyclerView.Adapter<VendorsHolder>() {

    companion object {
        const val EXTRA_VENDOR_MODEL = "EVM"
    }

    private val vendorsHoldersList = mutableListOf<VendorsHolder>()

    override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): VendorsHolder {
        val view = LayoutInflater.from(viewGroup.context).inflate(R.layout.fragment_marketplace_vendor_row_item, viewGroup, false)
        val vendorsHolder = VendorsHolder(view)
        vendorsHoldersList.add(vendorsHolder)
        vendorsHolder.rootLayout.addOnLayoutChangeListener { v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom ->
            vendorsHolder.rootLayout.updateLayoutParams {
                this.width = 250 + bottom
            }
        }
        vendorsHolder.rootLayout.pivotX = 0f
        vendorsHolder.rootLayout.pivotY = vendorsHolder.rootLayout.measuredHeight.toFloat()
        return vendorsHolder
    }

    override fun onBindViewHolder(vendorsHolder: VendorsHolder, i: Int) {
        val model = miniVendorModels[i]
        Picasso.get().load(model.bannerPicture).into(vendorsHolder.vendorImageView)
        vendorsHolder.vendorImageView.setOnClickListener { v: View? ->
            try {
                val intent = Intent(context, VendorPageActivity::class.java)
                intent.putExtra(EXTRA_VENDOR_MODEL, model)
                context.startActivity(intent)
            } catch (e: Exception) {
                e.printStackTrace()
                Toast.makeText(context, ResourceHelper.getString(R.string.marketplace_vendor_unavailable), Toast.LENGTH_SHORT).show()
            }
        }
    }

    override fun getItemCount(): Int = miniVendorModels.size

}

Это должно быть действительно простой вещью, но я борюсь с этим для ЧАСОВ.

Есть кто-нибудь идея?

...