告别卡顿!3步实现Glide+ViewPager2流畅图片轮播
你还在为Android图片轮播的卡顿、内存溢出烦恼吗?本文将带你用Glide(图片加载库)和ViewPager2(滑动控件)快速打造高性能轮播控件,3步完成集成,兼容Android 5.0+所有设备。
一、核心组件简介
Glide是专注于平滑滚动的Android图片加载库,提供自动内存管理和高效缓存机制。ViewPager2是AndroidX库中的滑动容器,支持垂直/水平滑动和 RecyclerView 适配器。两者结合可实现流畅的图片轮播体验。
项目核心模块路径:
二、实现步骤
1. 添加依赖配置
在项目级gradle/libs.versions.toml中定义版本:
[versions]
glide = "4.16.0"
viewpager2 = "1.0.0"
在模块级build.gradle添加依赖:
dependencies {
implementation "com.github.bumptech.glide:glide:${versions.glide}"
implementation "androidx.viewpager2:viewpager2:${versions.viewpager2}"
}
2. 创建轮播布局
在res/layout/activity_main.xml中添加ViewPager2:
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="200dp"/>
3. 实现轮播适配器
创建ImagePagerAdapter.kt继承RecyclerView.Adapter:
class ImagePagerAdapter(
private val context: Context,
private val imageUrls: List<String>
) : RecyclerView.Adapter<ImagePagerAdapter.ViewHolder>() {
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val imageView: ImageView = itemView.findViewById(R.id.imageView)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context)
.inflate(R.layout.item_image, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
Glide.with(context)
.load(imageUrls[position])
.placeholder(R.drawable.dog)
.into(holder.imageView)
}
override fun getItemCount() = imageUrls.size
}
布局文件res/layout/item_image.xml:
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"/>
4. 绑定数据与生命周期
在MainActivity.kt中初始化:
class MainActivity : AppCompatActivity() {
private lateinit var viewPager: ViewPager2
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewPager = findViewById(R.id.viewPager)
val imageUrls = listOf(
"https://example.com/image1.jpg",
"https://example.com/image2.jpg"
)
viewPager.adapter = ImagePagerAdapter(this, imageUrls)
}
}
三、优化技巧
1. 内存管理
设置Glide内存类别:
Glide.get(this).setMemoryCategory(MemoryCategory.HIGH) // [MainActivity.kt#L20](https://link.gitcode.com/i/324ed5adeaa84a1f123f11eed0599749#L20)
2. 预加载实现
使用Glide预加载功能:
Glide.with(this)
.load(imageUrl)
.preload()
3. 生命周期绑定
正确绑定生命周期避免内存泄漏:
Glide.with(fragment) // [RequestManager.java#L54](https://link.gitcode.com/i/39b79e0c3c51bf7a2257bc30e0335c7a)
.load(imageUrl)
.into(imageView)
四、效果展示
五、完整代码路径
- 适配器实现:HorizontalGalleryFragment.kt
- 主界面代码:MainActivity.kt
- 布局文件:main_activity.xml
通过以上步骤,你已成功实现基于Glide和ViewPager2的图片轮播控件。该方案已在官方示例Gallery模块中验证,可直接集成到生产环境。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




