Наличие ImageView в виде страниц внутри ViewPager: поиск возможного подхода при изменении ширины страницы

У меня есть ViewPager, который показывает предыдущую и следующую страницу, но я хочу изменить границы невыбранных страниц и сделать эти страницы меньше.

Эти изображения показывают границы макета этих страниц:

ViewPAger с границами страницы

Мне нужно уменьшить ширину страницы для грибов и груш.

getPageWidth Метод был единственным вариантом, который я имел в виду:

override fun getPageWidth(position: Int): Float {
        val absPosition = Math.abs(position - startOffset)

        return if (absPosition >= 1) {
            0.5f
        } else {
            0.9f
        }
 }

Это изменит ширину элементов 1 & 2 до 0,9 и изменит ширину элементов 0 & >2'на 0,5. Мне нужно оставить показанный элемент в покое и удалить поле для остальных страниц.

Коды, которые важны:

override fun instantiateItem(container: ViewGroup, position: Int): Any {
            val img = LayoutInflater.from(this@PagerActivity).inflate(R.layout.profile_image_card, container, false) as ImageView
            img.setImageResource(imageIds[position])
            container.addView(img)
            if (imageIds[position] == R.drawable.choose) {
                img.setOnClickListener {
                    Log.d("PAGER_PARADISE", "clicked on choose image")
                    //TODO: select from gallery
                }
            }

            img.setOnClickListener {
                profilePager?.currentItem = position
            }
            return img
        }

преобразователь страницы (показывая другие элементы меньше:

override fun transformPage(page: View, position: Float) {
    val absPosition = Math.abs(position - startOffset)
    if (absPosition >= 1) {
        //page.setElevation(baseElevation);
        page.scaleY = smallerScale
        page.scaleX = smallerScale
    } else {
        // This will be during transformation
        //page.setElevation(((1 - absPosition) * raisingElevation + baseElevation));
        page.scaleX = (smallerScale - 1) * absPosition + 1
        page.scaleY = (smallerScale - 1) * absPosition + 1
    }
}

Это изображение (сделанное с помощью графических редакторов) может помочь увидеть фактический желаемый результат:

ViewPager с разной шириной

РЕДАКТИРОВАТЬ:

Когда я установил pageMargin к отрицательному значению (например, -18), они приближаются, но из-за большего размера currentItem, Он выглядит разбитым и смещенным (зазор между центральными элементами буксира меньше, чем у других)

запас до -18

0 ответов

Другие вопросы по тегам