You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

daimajia SliderLayout无法加载HTTP协议图片问题求助

解决daimajia SliderLayout无法加载HTTP图片的问题

原因分析

Android 9.0(API 28)及以上系统默认禁止明文HTTP网络请求,而daimajia的SliderLayout默认使用的图片加载逻辑未适配该限制;同时Slider内部默认图片加载器未做HTTP兼容处理,而你使用的Glide/Picasso已通过自身配置适配了HTTP请求,因此能正常加载。

解决方案

方案1:允许应用明文HTTP流量(快速解决)

在AndroidManifest.xml的<application>标签中添加属性,全局允许明文请求:

<application
    ...
    android:usesCleartextTraffic="true">
    ...
</application>

若需更安全的配置(仅允许指定域名的HTTP请求),创建res/xml/network_security_config.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <!-- 替换为你的HTTP图片域名 -->
        <domain includeSubdomains="true">your-http-image-domain.com</domain>
    </domain-config>
</network-security-config>

再在AndroidManifest.xml的<application>标签中引用该配置:

<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">
    ...
</application>

方案2:替换Slider图片加载器为Glide/Picasso(推荐,更灵活)

daimajia的Slider支持自定义图片加载器,直接复用已验证可用的Glide/Picasso加载逻辑:

自定义Glide图片加载器

创建实现BaseSliderView.ImageLoadListener的类:

class GlideImageLoader : BaseSliderView.ImageLoadListener {
    override fun onLoadImage(slider: BaseSliderView, url: String, callback: BaseSliderView.ImageLoadListener.ImageLoadingCallback) {
        Glide.with(slider.context)
            .load(url)
            .placeholder(slider.emptyDrawable)
            .error(slider.emptyDrawable)
            .into(object : CustomTarget<Drawable>() {
                override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
                    callback.onImageReady(resource)
                }

                override fun onLoadCleared(placeholder: Drawable?) {}
            })
    }

    override fun onStartLoading() {}
    override fun onEndLoading() {}
}

在你的滑块初始化代码中设置该加载器:

// 给普通slide设置加载器
val slide = TextSliderView(this).image(imageRes)
    .setScaleType(BaseSliderView.ScaleType.CenterInside)
    .empty(R.drawable.no_image_placeholder)
    .setImageLoader(GlideImageLoader()) // 添加这行
image_slider.addSlider(slide)

// 给弹窗滑块也设置加载器
val scaledSlide = DialogTouchImageSlider(this, R.drawable.no_image_placeholder)
    .description("Description")
    .image(imageRes)
    .setScaleType(BaseSliderView.ScaleType.CenterInside)
    .empty(R.drawable.no_image_placeholder)
    .setImageLoader(GlideImageLoader()) // 添加这行
dialogSlider.addSlider(scaledSlide)

验证

修改后重新运行应用,HTTP协议的图片即可正常加载,与Glide/Picasso的表现一致。

内容的提问来源于stack exchange,提问作者Shubham Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:15:31