我正在尝试将图像从远程URL加载到Litho Image小部件中,但Litho小部件具有“drawable”作为设置图像的唯一支柱。有没有人试图从Litho Image小部件中的远程URL设置图像?
答案 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);
}
请注意,您需要在单独的Thread
或AsyncTask
中调用此方法,因为这是一项网络操作。