来自远程URL的Litho图像

时间:2017-10-25 17:55:00

标签: android litho

我正在尝试将图像从远程URL加载到Litho Image小部件中,但Litho小部件具有“drawable”作为设置图像的唯一支柱。有没有人试图从Litho Image小部件中的远程URL设置图像?

3 个答案:

答案 0 :(得分:1)

您可以使用将使用Fresco图像加载库的FrescoComponent来下载和渲染图像。 另外,您可以使用与Glide的集成: https://github.com/pavlospt/litho-glide/tree/master/litho-glide

答案 1 :(得分:0)

Litho-Fresco不支持远程图像。您必须在gradle中添加implementation 'com.facebook.fresco:fresco:1.13.0'implementation 'com.facebook.litho:litho-fresco:0.31.0'。然后您可以通过以下方式加载远程图像:

@LayoutSpec
object MovieComponentSpec {

fun getImageController(imageUrl : String) = Fresco.newDraweeControllerBuilder()
    .setUri(imageUrl)
    .build()


@JvmStatic
@OnCreateLayout
internal fun onCreateLayout(
    c: ComponentContext,
    @Prop title: String,
    @Prop imageUrl: String
): Component {

    return Column.create(c)
        .paddingDip(ALL, 16f)
        .backgroundColor(Color.WHITE)
        .child(
            FrescoImage.create(c).controller(getImageController(imageUrl))
        )
        .child(
            Text.create(c)
                .text(title)
                .textSizeSp(10f)
        )
        .build()
    }

}

答案 2 :(得分:-2)

如果您真的想使用Litho,可以下载图片,然后将其转换为Drawable对象。

public static Drawable drawableFromUrl(String url) throws IOException {
    Bitmap b = null;

    HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
    connection.connect();
    InputStream input = connection.getInputStream();

    b = BitmapFactory.decodeStream(input);

    return new BitmapDrawable(b);
}

请注意,您需要在单独的ThreadAsyncTask中调用此方法,因为这是一项网络操作。