Плавный переход заднего фона во ViewPager

143
26 мая 2019, 15:10

Всем привет! Подскажите по такому вопросу. Разрабатываю под android на Kotlin. Есть ViewPager, при перелистывании плавно меняется задний фон. Цвета заднего фона беру из colors. Все работает, но мне нужно вместо 3-ех цветов использовать 3 своих градиента, которые храниться в drawable. Кто сталкивался с подобным, подскажите, пожалуйста.

Код главной активности:

class MainActivity : AppCompatActivity() {
    private var mPager: ViewPager? = null
    private var mPagerAdapter: PagerAdapter? = null
    private var colors: Array<Int>? = null
    private val argbEvaluator = ArgbEvaluator()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mPager = findViewById(R.id.pager)
        mPagerAdapter = ScreenSlidePagerAdapter(supportFragmentManager)
        mPager!!.adapter = mPagerAdapter
        mPager!!.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
                if (position < mPagerAdapter!!.count - 1 && position < (colors?.size ?: 0) - 1) {
                    mPager!!.setBackgroundColor(
                        argbEvaluator.evaluate(
                            positionOffset,
                            colors?.get(position),
                            colors?.get(position + 1)
                        ) as Int
                    )
                } else {
                    colors?.get(colors!!.size - 1)?.let { mPager!!.setBackgroundColor(it) }
                }
            }
            override fun onPageSelected(position: Int) {
            }
            override fun onPageScrollStateChanged(state: Int) {
            }
        })
        setUpColors()

    }
    private fun setUpColors() {
        val page1Bg = ContextCompat.getColor(applicationContext, R.color.Page1Bg)
        val page2Bg = ContextCompat.getColor(applicationContext, R.color.Page2Bg)
        val page3Bg = ContextCompat.getColor(applicationContext, R.color.Page3Bg)
        colors = arrayOf(page1Bg, page2Bg, page3Bg)
    }
    private inner class ScreenSlidePagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {
        override fun getItem(position: Int): Fragment {
            return ScreenSlidePageFragment()
        }
        override fun instantiateItem(container: ViewGroup, position: Int): Any {
            return super.instantiateItem(container, position)
        }
        override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
            super.destroyItem(container, position, `object`)
        }
        override fun getCount(): Int {
            return NUM_PAGES
        }
    }
    companion object {
        private val TAG = MainActivity::class.java.name
        private val NUM_PAGES = 3
    }
}

Сам фрагмент - ScreenSlidePageFragment:

class ScreenSlidePageFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return inflater.inflate(R.layout.fragment_screen_slide_page, container, false)
}

}

READ ALSO
Быстрые потокобезопасные Java- коллекции

Быстрые потокобезопасные Java- коллекции

Есть ли библиотеки с конкурентными коллекциями, которые работают быстрее стандартного пакета javautil

104
Ошибка при выполнении запроса (из 1C)

Ошибка при выполнении запроса (из 1C)

У нас из обработки 1С раньше все работала, пару недель назад перестала отображать точки на карте

127
Не находит точку входа в программу

Не находит точку входа в программу

Выполняю тестовые задания в книге по Java и не могу разобраться: если интерфейс объявлен в одном файле с классом компилятор пытается найти...

133
Появляются сильные ссылки на объект в лямбде или слушателе, после чего GC не может очистить память

Появляются сильные ссылки на объект в лямбде или слушателе, после чего GC не может очистить память

Есть игра на JavaFXИ я уже несколько дней пытаюсь бороться с это проблемой

107