android滾動(dòng)控件如何同步滾動(dòng)

小樊
86
2024-07-23 11:48:06

要實(shí)現(xiàn)Android滾動(dòng)控件的同步滾動(dòng),可以使用OnScrollListener接口來監(jiān)聽滾動(dòng)事件,然后通過scrollTo()scrollBy()方法來控制其他滾動(dòng)控件的滾動(dòng)位置。

以下是一個(gè)示例代碼,實(shí)現(xiàn)了兩個(gè)ListView控件的同步滾動(dòng):

public class SyncedScrollActivity extends AppCompatActivity {
    private ListView listView1;
    private ListView listView2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_synced_scroll);

        listView1 = findViewById(R.id.listView1);
        listView2 = findViewById(R.id.listView2);

        ArrayAdapter<String> adapter1 = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.items));
        ArrayAdapter<String> adapter2 = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.items));

        listView1.setAdapter(adapter1);
        listView2.setAdapter(adapter2);

        listView1.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                listView2.setSelectionFromTop(firstVisibleItem, 0);
            }
        });

        listView2.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                listView1.setSelectionFromTop(firstVisibleItem, 0);
            }
        });
    }
}

在上面的代碼中,我們分別為兩個(gè)ListView控件設(shè)置了相同的滾動(dòng)監(jiān)聽器,當(dāng)一個(gè)ListView滾動(dòng)時(shí),另一個(gè)ListView會(huì)根據(jù)第一個(gè)的位置進(jìn)行同步滾動(dòng)。

0