I need to make something like this

And when I slide or select third option or first the view should become like this

I tried using linear layout and when I slided I added margins at runtime, but it did not seem good, can some please suggest me some good idea for achieving this?
CodePudding user response:
If you want implement it by someting like LinearLayout and ImageView, you can change margin or padding of ImageView. But there are some useful library for that reason.
Like this:
You can find it here:
https://guides.codepath.com/android/Bottom-Navigation-Views
In addition you can find some other third-party libraries here: https://camposha.info/android-examples/android-bottom-navigation-libraries/
I hope these be helpful
CodePudding user response:
I think in your case it is better to use ViewPager and add Transformer for resizing and animate selected items.
Here is my ViewPager sample:
In your xml file:
<androidx.viewpager2.widget.ViewPager2
android:id="@ id/viewPager"
visibility="@{!loading}"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="40dp"
android:paddingEnd="40dp" />
Here is your fragment/activity for config ViewPager:
binding.viewPager.apply {
offscreenPageLimit = 100
val transformer = CompositePageTransformer()
transformer.addTransformer(MarginPageTransformer(PixelUtil.dpToPx(20f)))
transformer.addTransformer { page, position ->
run {
val r = 1 - abs(position)
page.scaleY = 0.85f r * 0.15f
}
}
setPageTransformer(transformer)
registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback(){
override fun onPageSelected(position: Int) {
viewModel.currentPosition.value = position
super.onPageSelected(position)
}
})
}
And here is for set Adapter for ViewPager:
val simpleAdapter = ModelsListAdapter(models) { onClick() }
binding.viewPager.adapter = simpleAdapter
Adapter should be some thing like this:
class ModelsListAdapter(private val list: ArrayList<Model>,val itemClick:() -> (Unit))
: RecyclerView.Adapter<ModelViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ModelViewHolder {
val inflater = LayoutInflater.from(parent.context)
return ModelViewHolder(inflater, parent,itemClick)
}
override fun onBindViewHolder(holder: ModelViewHolder, position: Int) {
val movie: Model = list[position]
holder.bind(movie)
}
override fun getItemCount(): Int = list.size
}
