ViewPager in Android
Overview
Viewpager is a layout manager which allows a user to flip left or right throughout the pages of our application with data.
Steps to create a static ViewPager
- Create an Enum for all the layouts
enum class ModelObject(val titleId : Int , val layoutId : Int)
{
RED(R.string.red , R.layout.red_view) ,
BLUE(R.string.blue , R.layout.blue_view) ,
GREEN(R.string.green , R.layout.green_view);
}
- Create a class and extend it with PagerAdapter. Apart from implementing the abstract methods isViewFromObject and getCount, you also have to override instantiateItem and destroyItem
class CustomPagerAdapter(private val context : Context) : PagerAdapter()
{
override fun getCount() : Int
{
return ModelObject.values().size
}
override fun isViewFromObject(view : View , `object` : Any) : Boolean
{
return view == `object`
}
override fun instantiateItem(container : ViewGroup , position : Int) : Any
{
val modelObject : ModelObject = ModelObject.values()[position]
val layoutInflater : LayoutInflater = LayoutInflater.from(context)
val layout = layoutInflater.inflate(modelObject.layoutId , container , false)
container.addView(layout)
return layout
}
override fun destroyItem(container : ViewGroup , position : Int , `object` : Any)
{
container.removeView(`object` as View)
}
}
- Use the reference of ViewPager in MainActivity
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState : Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewpager.adapter = CustomPagerAdapter(this)
}
}
Steps to create a static ViewPager2
- Add the required dependency in build.gradle (Module) file.
implementation "com.google.android.material:material:1.6.0-alpha01"
- Add few images in drawable.
- Create a class for the adapter. Create an inner class and extend it with RecyclerView.ViewHolder. Then implement RecyclerView.Adapter in the class and override all the implementing methods.
class ViewPagerAdapter(private val images : List<Int>) :
RecyclerView.Adapter<ViewPagerAdapter.ViewPagerHolder>()
{
inner class ViewPagerHolder(itemView : View) : RecyclerView.ViewHolder(itemView)
override fun onCreateViewHolder(parent : ViewGroup , viewType : Int) : ViewPagerHolder
{
val view =
LayoutInflater.from(parent.context).inflate(R.layout.item_view_layout , parent , false)
return ViewPagerHolder(view)
}
override fun onBindViewHolder(holder : ViewPagerHolder , position : Int)
{
val currentImage = images[position]
holder.itemView.imgImageContainer.setImageResource(currentImage)
}
override fun getItemCount() : Int
{
return images.size
}
}
- Set the adapter of ViewPager2 in MainActivity.
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState : Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val images = listOf(
R.drawable.ic_4g ,
R.drawable.ic_airport_shuttle ,
R.drawable.ic_launcher_background ,
R.drawable.ic_launcher_foreground
)
val adapter = ViewPagerAdapter(images)
viewpager2.apply {
this.adapter = adapter
this.orientation = ViewPager2.ORIENTATION_VERTICAL
this.beginFakeDrag()
this.fakeDragBy(-10f)
this.endFakeDrag()
}
}
}
- Hello World
Comments
Post a Comment