屏幕劃動(dòng)是在兩個(gè)完整界面間的轉(zhuǎn)換哼凯,它在一些UI中很常見(jiàn),比如設(shè)置向?qū)Ш突脽舴庞场?a target="_blank" rel="nofollow">Android官方培訓(xùn)課程中文版
有關(guān) ViewPager 用法介紹可以參考官方文檔 Android
安卓官方文檔 https://developer.android.google.cn/develop/index.html
此為一個(gè)博客評(píng)論中看到的方案梧税,實(shí)踐后確實(shí)可行,做個(gè)記錄。
修改 ViewPager 的 Change 事件達(dá)到循環(huán)滾動(dòng)(Java):
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (position == 0 && positionOffsetPixels == 0)
mViewPager.setCurrentItem(data.size() - 2, false);
else if (position == mFragments.size() - 1 && positionOffsetPixels == 0)
mViewPager.setCurrentItem(1, false);
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
自動(dòng)切換 View (Kotlin)
參考 RxJava輪詢器:interval
Observable.interval(3, 3, TimeUnit.SECONDS).bindToLifecycle(this)
.observeOn(AndroidSchedulers.mainThread())
.subscribe { next ->
var currentIndex = mViewPager.currentItem
if (++currentIndex == mAdapter.count) {
mViewPager.currentItem = 1
} else {
mViewPager.setCurrentItem(currentIndex, true)
}
}
以下為 Kotlin 實(shí)現(xiàn)的代碼 ->
ViewPager 布局和設(shè)置
class Home : Fragment() {
private lateinit var mAdapter: HomeLoopPagerAdapter
private lateinit var mViewPager: ViewPager
/**
* 界面布局
*/
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View = UI {
linearLayout {
orientation = LinearLayout.VERTICAL
viewPager {
id = HomeTabFragment.ID_VIEW_PAGER
backgroundColor = Color.WHITE
}.lparams {
width = matchParent
height = dip(130)
topMargin = dip(8)
bottomMargin = dip(8)
}
}
}.view
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mAdapter = HomeLoopPagerAdapter()
mViewPager = view.findViewById(ID_VIEW_PAGER) as ViewPager
mViewPager.adapter = mAdapter
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
/**
* 適配器數(shù)據(jù)
*/
val data = arrayListOf<HomeLooperAdapterBean>()
for (i in 1..5) {
val slideshowView = SimpleDraweeView(context)
val hierarchy = GenericDraweeHierarchyBuilder(resources)
.setActualImageScaleType(ScalingUtils.ScaleType.FIT_XY)
.setPlaceholderImageScaleType(ScalingUtils.ScaleType.FIT_XY)
.setPlaceholderImage(R.mipmap.img_home_slideshow)
.build()
slideshowView.hierarchy = hierarchy
slideshowView.setImageURI(Uri.parse(""), context)
val bean = HomeLooperAdapterBean(slideshowView)
data.add(bean)
}
mAdapter.updateData(data)
mViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
/**
* 關(guān)鍵代碼
*/
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
if (position == 0 && positionOffsetPixels == 0)
mViewPager.setCurrentItem(data.size - 2, false)
else if (position == data.size - 1 && positionOffsetPixels == 0)
mViewPager.setCurrentItem(1, false)
}
override fun onPageSelected(position: Int) {
}
})
}
companion object {
val ID_VIEW_PAGER = 1001
}
}
適配器無(wú)變化
class HomeLoopPagerAdapter : PagerAdapter() {
val mData = arrayListOf<HomeLooperAdapterBean>()
override fun isViewFromObject(view: View?, `object`: Any?): Boolean = view == `object`
override fun getCount(): Int = mData.size
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any?) = container.removeView(`object` as View)
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val view = mData[position].simpleDraweeView
container.addView(view)
return view
}
fun updateData(list: List<HomeLooperAdapterBean>) {
mData.clear()
mData.addAll(list)
notifyDataSetChanged()
}
}
Over 甸鸟。。兵迅。