簡體   English   中英

如何一鍵滑動兩個列表視圖

[英]how to slide two listviews with one touch

兩個列表視圖的圖像

我正在嘗試構建我提供鏈接的圖像。 第一個列表視圖右側的第二個列表視圖。 兩個列表視圖項都可以單獨點擊。 沿着 y 軸,第二個列表視圖的項目必須在第一個列表視圖的項目之間。 如果用戶滾動其中之一,它們都應該滾動。 我有一些解決方案。 第一個是一鍵控制兩個列表視圖。 另一種解決方法是使用一個列表視圖。 但是它有第二個列表視圖的觸摸事件問題。 似乎第一種方法是正確的,但我不知道如何連接兩個列表視圖。 提前致謝。

我認為它可以使用OnScrollListener來實現,基本上你可以在它的兄弟視圖滾動時滾動其他列表/回收器視圖。 這是片段,假設您使用 Recycleview

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val left = findViewById<RecyclerView>(R.id.left)
        val right = findViewById<RecyclerView>(R.id.right)
        left.adapter = Adapter()
        right.adapter = Adapter()

        val switcher = FocusSwitchListener(left, right)

        left.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                if (switcher.isLeftLastFocused) {
                    right.stopScroll()
                    right.scrollBy(dx, dy)
                }
            }
        })
        right.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                if (switcher.isRightLastFocused) {
                    left.stopScroll()
                    left.scrollBy(dx, dy)
                }
            }
        })
    }
}

焦點切換監聽器

class FocusSwitchListener(left: View, right: View) {
    var isLeftLastFocused: Boolean = false
        private set
    var isRightLastFocused: Boolean = false
        private set

    init {
        left.setOnTouchListener { _, event ->
            if (event?.action == MotionEvent.ACTION_DOWN) {
                isLeftLastFocused = true
                isRightLastFocused = false
            }
            false
        }
        right.setOnTouchListener { _, event ->
            if (event?.action == MotionEvent.ACTION_DOWN) {
                isRightLastFocused = true
                isLeftLastFocused = false
            }
            false
        }
    }
}

和活動xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

   <androidx.recyclerview.widget.RecyclerView
       android:layout_width="0dp"
       android:id="@+id/left"
       android:layout_weight="0.5"
       app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
       android:layout_height="match_parent"/>
    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="0dp"
        android:id="@+id/right"
        android:layout_weight="0.5"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        android:layout_height="match_parent"/>
</LinearLayout>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM