Fresco: Cómo obtener el tamaño de vista real antes de onBindViewHolder() en Recyclerview

Creado en 9 nov. 2015  ·  6Comentarios  ·  Fuente: facebook/fresco

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!!!

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.

Todos 6 comentarios

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();

¿Fue útil esta página
0 / 5 - 0 calificaciones