Estoy cargando una imagen grande en una vista de reciclado.
Quiero cambiar el tamaño antes de que se establezca en SimpleDraweeView.
La pregunta es que no puedo obtener el tamaño de vista real antes de eso.
El diseño de mi vista de elementos es:
<***.SquaredFrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.facebook.drawee.view.SimpleDraweeView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</***.SquaredFrameLayout>
el SquaredFrameLayout
es un diseño cuadrado basado en su ancho
Mi adaptador es como:
<strong i="14">@Override</strong>
public void onBindViewHolder(<strong i="15">@NonNull</strong> List<Object> items, int position,
<strong i="16">@NonNull</strong> ViewHolder holder) {
FeedViewHolder viewHolder = (FeedViewHolder) holder;
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(URI1)
.setResizeOptions(new ResizeOptions(*, *))
.build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(viewHolder.mSimpleDraweeView.getController())
.build();
viewHolder.mSimpleDraweeView.setController(controller);
}
No puedo obtener el tamaño como view.getWidth()
o view.getLayoutParams().width
.
devolverá 0
¿Cómo puedo obtener el tamaño de vista real antes onBindViewHolder()
?
¡¡¡Gracias por tu ayuda!!!
Si la vista aún no pasó por la fase de diseño (que es común con onBindViewHolder), no habrá una dimensión medida. Para resolver esto, debe agregar un oyente para el diseño en ViewTreeObserver.
También hay una alternativa más rápida y eficiente, donde puede pasar el ancho de la vista del reciclador al adaptador y aplicar matemáticas simples para acceder al ancho de la vista.
¿alguien puede ayudar?
Le sugiero que haga lo que sugirió @gokhanbarisaker y pase el ancho al adaptador.
Además, cuando alguien trata de ayudarte no pienso responder "¡NONONONO!" realmente los alentará a que lo ayuden nuevamente en el futuro.
¡Lo siento mucho por eso!
No me referia a eso.
gracias de nuevo
No hay problema :)
itemView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
ancho int = itemView.getMeasuredWidth();
int altura = itemView.getMeasuredHeight();
Comentario más útil
Le sugiero que haga lo que sugirió @gokhanbarisaker y pase el ancho al adaptador.
Además, cuando alguien trata de ayudarte no pienso responder "¡NONONONO!" realmente los alentará a que lo ayuden nuevamente en el futuro.