반응형

ViewPager

설명

  • 좌우로 스와이프 하며 View를 전환하는 AdapterView
  • PagerAdapter를 구현하여 사용한다.

코드

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>
undefinedcopy
view1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="view1" />

</LinearLayout>
undefinedcopy
view2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="view2" />

</LinearLayout>
undefinedcopy
view3.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="view3" />

</LinearLayout>
undefinedcopy
MainActivity
class MainActivity : AppCompatActivity() {
    var viewPager: ViewPager? = null
    val viewList = ArrayList<View>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewList.addAll(arrayOf(
            layoutInflater.inflate(R.layout.view1, null),
            layoutInflater.inflate(R.layout.view2, null),
            layoutInflater.inflate(R.layout.view3, null)
        ))

        viewPager = findViewById(R.id.viewPager)
        viewPager?.adapter = CustomPagerAdapter()
        viewPager?.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
            override fun onPageScrollStateChanged(state: Int) {
                Toast.makeText(baseContext, "onPageScrollStateChanged - $state", Toast.LENGTH_SHORT).show()
            }

            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
                Toast.makeText(baseContext, "onPageScrolled - $position", Toast.LENGTH_SHORT).show()
            }

            override fun onPageSelected(position: Int) {
                Toast.makeText(baseContext, "onPageSelected - $position", Toast.LENGTH_SHORT).show()
            }
        })
    }

    inner class CustomPagerAdapter : PagerAdapter() {
        override fun isViewFromObject(view: View, obj: Any): Boolean {
            return view == obj
        }

        override fun getCount(): Int {
            return viewList.size
        }

        override fun instantiateItem(container: ViewGroup, position: Int): Any {
            viewPager?.addView(viewList[position])

            return viewList[position]
        }

        override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
            viewPager?.removeView(obj as View)
        }
    }
}
undefinedcopy

참고

반응형

'Development > Android' 카테고리의 다른 글

[Android] Activity  (0) 2021.02.09
[Android] RecyclerView  (0) 2021.02.09
[Android] Spinner  (0) 2021.02.09
[Android] ListView  (0) 2021.02.09
[Android] Layout  (0) 2021.02.09

+ Recent posts