8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

背景

ViewPager 在应用中使用较为广泛,诸如页面轮播图,App引导页,大图预览等。其中指示器页比较重要

它用于提示用户当前的页面状态,使得应用更具交互性。

PagerTitleStrip

PagerTitleStrip 内置的指示器,布局作为ViewPager的一个子View,需要设置android:layout_gravity=TOP/BOTTOM

但效果总不是太理想,多数情况,大都自定义一个Indicator,放在ViewPager的外部,通过ViewPager的onScroll方法,更新Indicator的位置效果等

自定义 Indicator

初步归纳为3步,自定义View,布局文件引用自定义View,关联自定义View与ViewPager

自定义 PageIndicator

class PageIndicator extends RelativeLayout {

@Override

PageIndicator(context, attrs, defStyleAttr) {}

// ...

}

布局文件引用

android:id="@+id/music_indicator"

android:layout_width="match_parent"

android:layout_height="48dp" />

android:id="@+id/music_view_pager"

android:layout_width="match_parent"

android:layout_height="match_parent" />

关联ViewPager

mPageIndicator.setViewPager(mViewPager)

// 并设置指示器的内容

mPageIndicator.addIndicators(getIndicators())

private fun getIndicators(): ArrayList {

val items = ArrayList()

return items

}

控制Indicator行为

重写onPageScrolled,点击Indicator实现ViewPager翻页,跨页跳转时的属性动画

关键方法:onPageScrolled()

ViewPager.OnPageChangeListener.onPageScrolled()

override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {

val litem = getIndicator(position)

val ritem = getIndicator(position + 1)

litem?.setActiveState(1 - positionOffset)

ritem?.setActiveState(positionOffset)

}

跨页切换 ViewPager 动画

当前页面个数为4,从第一页直接跳转到第4页时,能明显感觉到2、3 两页页显示出来了。

mViewPager.setCurrentItem(toItemIndex, true)

其原因就是直接在onPageScrolled在这种场景下发生了回调,从而导致Indicator的行为改变。所以,应该在点击顶部指示器的时候,

屏蔽掉onPageScrolled里对指示器的控制,在点击时添加指示器的动画

animF.addListener(object : SimpleAnimator() {

override fun onAnimationEnd(animation: Animator?) {

indicator.isMenuItemClicked = false

}

})

animF.start()

// onPageScrolled() 里

if (isMenuItemClicked) {

// click the menu item, do animation directly

return

}

litem?.setActiveState(1 - positionOffset)

ritem?.setActiveState(positionOffset)

属性动画

ValueAnimator.ofFloat(0, 1)

ValueAnimator.setDuration(250) // 默认的页面切换时间

ValueAnimator.addAmimator(onAnimationEnd())

如何获取进入界面和退出界面

由于ViewPager的currentItem在滑动过程中是变化的,不能作为参考。 从第0页滑动到第1页position:0 , offset: 0.0->1.0f, currentItem: 当offset>0.5f的时候,会被更新为1

从第1页滑动到第0页position:0 , offset: 1.0->0.0f, currentItem: 当offset<0.5f的时候,会被更新为0

从第1页滑动到第2页position:1 , offset: 0.0->1.0f, currentItem: 当offset>0.5f的时候,会被更新为2

从第2页滑动到第1页position:1 , offset: 1.0->0.0f, currentItem: 当offset<0.5f的时候,会被更新为1

从第2页滑动到第3页position:2 , offset: 0.0->1.0f, currentItem: 当offset>0.5f的时候,会被更新为3

从第3页滑动到第2页position:2 , offset: 1.0->0.0f, currentItem: 当offset<0.5f的时候,会被更新为2

可以看出,position在左滑或者右滑时,始终保持不变,offset的变化值始终是滑动过程中的右边页面。

即:能定位到当前滑动页的左边和右边页,从而有效的控制指示器的行为

以position = 1举例:

如果offset从0到1,说明是从第1页滑向第2页。本次滑动过程中: 左边页是第1页,右边是第2页,offset从0~1,进入动画

如果offset从1到0,说明是从第2页滑向第1页。本次滑动过程中: 左边页是第1页,右边是第2页,offset从1~0,退出动画

总结

关键数据 position,是onPageScrolled的第一个参数onPageScrolled(int position, *, **)

滑动过程中的左边页的需要即为 position, 而右边页对应就是 position + 1 所以才有下面的写法

val litem = getIndicator(position)

val ritem = getIndicator(position + 1)

android onpagescrolled 参数,Android相关推荐

  1. android datepicker 参数,android常用组件之DatePicker和TimePicker

    在android中,DatePicker组件和TimePicker组件分别是日期选择器和时间选择器. 该实例中,当点击日期选择器按钮后,弹出日期选择框,用户选择日期后andoid会将日期显示到Text ...

  2. android 多类型参数,Android的数据绑定-类型参数T具有不兼容的上限:ViewDataBinding和MainActivity...

    我正在使用Android Studio 2.0 Preview 4.我正在使用Android SDK工具25 rc1. 无论我清理/重建项目多少次,此错误仍然存在. File-> Invalid ...

  3. android tabpageindicator 参数,Android实现Tab布局的4种方式(Fragment+TabPageIndicator+ViewPager)...

    Android现在实现Tab类型的界面方式越来越多,今天就把常见的实现方式给大家来个总结.目前写了: 1.传统的ViewPager实现 2.FragmentManager+Fragment实现 3.V ...

  4. android sqlite 参数,Android SQLite3命令详解教程

    SQLite3可以让我们手动的对SQLite数据库进行管理.一共有2个sqlite3,一个在电脑上,它位于 android-sdk-windows\tools\sqlite3.exe,用于电脑上SQL ...

  5. android getevent参数,android getevent、sendevent、input keyevent 使用说明

    设备节点: dev 字符设备节点: shell@android:/dev/input $ ll crw-rw---- root input 13, 64 2013-11-28 17:23 event0 ...

  6. android settext 参数,Android TextView.setTextColor()的参数设置方式

    摘要:Android TextView.setTextColor()的参数设置方式 查了下资料发现setTextColor()的参数应该写成以下的这种形式: setTextColor(0xFF0000 ...

  7. android onlescan 参数,Android BLE:从iOS外设广告时,在onLeScan()回调中检索服务UUID

    我正在使用Nexus 4(4.4 kitkat)作为中央和iPad作为外设.外围设备有广告服务.广告包有一些数据(22字节)的服务UUID.当我尝试从 Android扫描外围设备时,iPad外围设备被 ...

  8. android super参数,Android Superuser 提权漏洞分析

    近日,国外安全研究人员揭露多款Android平台下的授权应用管理软件存在3个安全漏洞,利用漏洞可进行root. TSRC也对这3个Android Superuser 提权漏洞进行了分析,具体分析情况请 ...

  9. android gravity参数,android - 如何以编程方式设置layout_gravity?

    android - 如何以编程方式设置layout_gravity? 我的问题很简单, 如何以编程方式设置我的按钮layout_gravity? 我在互联网上发现了这个,但它只是抛出了一个Nullpo ...

最新文章

  1. 待办事项优先级 开发_如何通过创建主题待办事项确定学习内容的优先级
  2. SpringBoot 项目瘦身指南,瘦到不可思议!
  3. java栈 类 堆_详细介绍Java中的堆和栈
  4. Linux磁盘的划分
  5. vCenter Converter Standalone使用文档
  6. pandas 提取某几列_【科学计算工具二】初识Pandas
  7. 个人DP训练(基础版)
  8. MySQL索引的原理,B+树、聚集索引和二级索引的结构分析
  9. 3行代码实现单片机AD采样功能
  10. 拦截图片代码 精易web浏览器_精易Web浏览器 UChk验证源码
  11. 蓝桥杯算法竞赛培训(二) 汉诺塔与STL
  12. Plain Road
  13. 最值得收藏的 搜狗输入法 常用快捷键使用, 让你的效率成倍增加
  14. GVIDO MUSIC向德意志唱片公司成立120周年 Special Gala Concert Presented by 小泽征尔 斋藤纪念管弦乐团提供赞助
  15. jupyter 下进行markdown
  16. 机器人学:(3)机器人运动学
  17. 1.2_CentOS 7 终端系统识别挂载 USB 的 NTFS 分区
  18. CDMA移动通信网的关键技术(转)
  19. 人眼有多少像素 人类VS相机之间的差异有多大
  20. R语言和医学统计学(3):卡方检验

热门文章

  1. MyBatis 缓存详解-cache 缓存
  2. mybatis-逻辑翻页
  3. MapReduce案例-wordcount-JobMain代码
  4. 设计模式之_动态代理_06
  5. 让你不再害怕指针的应用-全程仿真+注解(第一部分:变量)
  6. free: seconds argument `1‘ failed
  7. Cortex-M3-MPU(存储器保护单元)
  8. linux编译安装mysql5.1.x
  9. 阿里云移动测试平台MQC移动测试沙龙第3期【北京站】
  10. vue computed 使用小问题