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

如何通过左右按钮控制ImageView实现左右滑动切换图片效果

实现ImageView左右按钮控制滑动切换的方案

以下两种方案均可实现需求,可根据实际图片数量选择,动画时长300ms可根据需求自行调整。

方案1:轻量实现(仅2张图,无需额外引入组件)

  • 首先布局中添加重叠的ImageView与左右按钮:
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="200dp">
    <ImageView
        android:id="@+id/ivImage1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/img1"/>
    <ImageView
        android:id="@+id/ivImage2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        android:src="@drawable/img2"/>
</FrameLayout>
<Button
    android:id="@+id/btnLeft"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="左切"/>
<Button
    android:id="@+id/btnRight"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="右切"/>
  • 逻辑代码中添加滑动切换逻辑:
// 标记当前展示的是第1张图
private var isShowFirst = true

btnRight.setOnClickListener {
    if (isShowFirst) {
        // 图1向左滑出屏幕
        ivImage1.animate()
            .translationX(-ivImage1.width.toFloat())
            .setDuration(300)
            .start()
        // 图2从右侧滑入屏幕
        ivImage2.apply {
            visibility = View.VISIBLE
            translationX = ivImage2.width.toFloat()
            animate()
                .translationX(0f)
                .setDuration(300)
                .start()
        }
        isShowFirst = false
    }
}

btnLeft.setOnClickListener {
    if (!isShowFirst) {
        // 图2向右滑出屏幕
        ivImage2.animate()
            .translationX(ivImage2.width.toFloat())
            .setDuration(300)
            .withEndAction { ivImage2.visibility = View.GONE }
            .start()
        // 图1从左侧滑入屏幕
        ivImage1.animate()
            .translationX(0f)
            .setDuration(300)
            .start()
        isShowFirst = true
    }
}

方案2:多图扩展方案(使用ViewPager2,适配任意数量图片场景)

  • 首先引入ViewPager2依赖:
implementation "androidx.viewpager2:viewpager2:1.0.0"
  • 布局中添加ViewPager2与左右按钮:
<androidx.viewpager2.widget.ViewPager2
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="200dp"/>
<!-- 左右按钮布局同方案1 -->
  • 给ViewPager2设置图片适配器:
// 自定义图片资源列表
val imgList = listOf(R.drawable.img1, R.drawable.img2, R.drawable.img3)
viewPager.adapter = object : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val iv = ImageView(parent.context)
        iv.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
        iv.scaleType = ImageView.ScaleType.CENTER_CROP
        return object : RecyclerView.ViewHolder(iv) {}
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        (holder.itemView as ImageView).setImageResource(imgList[position])
    }

    override fun getItemCount() = imgList.size
}
  • 按钮点击控制翻页,默认自带的滑动动画已经符合需求无需额外配置:
btnRight.setOnClickListener {
    val currentPos = viewPager.currentItem
    if (currentPos < imgList.size -1) {
        viewPager.currentItem = currentPos + 1
    }
}

btnLeft.setOnClickListener {
    val currentPos = viewPager.currentItem
    if (currentPos > 0) {
        viewPager.currentItem = currentPos - 1
    }
}

内容的提问来源于stack exchange,提问作者Rafii Putra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:30:05