Я делаю браузер.Для основы возьмите Viewpager и FragmentStatePagerAdapter.Когда добавляется новый фрагмент, он сдвигает последний фрагмент в сторону или на экране появляется уже сдвинутый элемент.
[1] http://prnt.sc/p912dn [1]
[2] http://prnt.sc/p912u1 [2]
[3] http://prnt.sc/p912x5 [3]
Я не нашел подобных проблем.
override fun getItem(position: Int): Fragment = listOpenTabs[position].fragment
override fun getCount(): Int {
return listOpenTabs.size
}
private var listOpenTabs = mutableListOf<TabsModel>()
fun removeAt(position: Int) {
onClickCloseTab(listOpenTabs[position])
}
fun setData(list: MutableList<TabsModel>) {
listOpenTabs = list
}
// Custom Viewpager
private var swipeable: Boolean = false конструктор (context: Context): super (context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
this.swipeable = true
}
@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(event: MotionEvent): Boolean {
return if (this.swipeable) {
super.onTouchEvent(event)
} else false
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return if (this.swipeable) {
super.onInterceptTouchEvent(event)
} else false
}
fun setSwipeable(swipeable: Boolean) {
this.swipeable = swipeable
}
// Activity В действии я использовал этот метод для масштабного viewpager иоткрытые вкладки
if (dm2!!.widthPixels - viewPager.width < 5) {
viewPager.pageMargin = 40
llayoutviewpage.gravity = CENTER_IN_PARENT
val pvhX = PropertyValuesHolder.ofFloat("scaleX", 1f, 0.8f)
val pvhY = PropertyValuesHolder.ofFloat("scaleY", 1f, 0.8f)
val scale = ObjectAnimator.ofPropertyValuesHolder(viewPager, pvhX, pvhY)
scale.duration = 100
scale.start()
val Rlparam =
RelativeLayout.LayoutParams(dm2!!.widthPixels * 8 / 10, dm2!!.heightPixels * 8 / 10)
Rlparam.addRule(CENTER_IN_PARENT)
llayoutviewpage.layoutParams = Rlparam
viewPager.setSwipeable(true)
nav_bar.visibility = View.GONE
addTab.visibility = View.VISIBLE
viewPager.currentItem = viewPager.currentItem
} else {
viewPager.pageMargin = 0
llayoutviewpage.gravity = CENTER_IN_PARENT
val pvhX = PropertyValuesHolder.ofFloat("scaleX", 0.8f, 1f)
val pvhY = PropertyValuesHolder.ofFloat("scaleY", 0.8f, 1f)
val scale = ObjectAnimator.ofPropertyValuesHolder(viewPager, pvhX, pvhY)
scale.duration = 100
scale.start()
val Rlparam2 = RelativeLayout.LayoutParams(dm2!!.widthPixels, dm2!!.heightPixels)
Rlparam2.addRule(CENTER_IN_PARENT)
llayoutviewpage.layoutParams = Rlparam2
viewPager.setSwipeable(false)
nav_bar.visibility = View.VISIBLE
addTab.visibility = View.GONE
viewPager.currentItem = viewPager.currentItem
}