尝试用kotlin做一个app(二)vocus

类似于ViewPager的效果,子类导航页面可以滑动,当滑动某个子类导航页面,导航线会平滑地向父类导航移动

·添加布局

页面有若干item组成,每个item按样式是一张图片,下面加文字。那据说有一种比较高级的实现方法,就是外边一个TextView,里面添加图片和文字。TextView里面加图片简单,只要添加android:drawableTop="icon的ID",但是这有一个问题,在尝试用drable.setBounds设置图片的宽高的时候,无效。

·在values下添加attrs.xml(自定义属性)

·新建ImageTextView类

在根布局中添加:

添加布局代码,因为属于ViewPager的滑动页面,所以新建一个fragment_home_nav_program.xml吧

classHomePageNavAdapter:PagerAdapter(){overridefuninstantiateItem(container:ViewGroup,position:Int):Any{//returnsuper.instantiateItem(container,position)when(position){0->{varnavView=LayoutInflater.from(container.context).inflate(R.layout.fragment_home_nav_program,container,false)container.addView(navView)returnnavView}1->{vartextView=TextView(container.context)textView.text="第二页..."container.addView(textView)returntextView}2->{vartextView=TextView(container.context)textView.text="第三页..."container.addView(textView)returntextView}else->{vartextView=TextView(container.context)textView.text="超出范围了"returntextView}}}overridefunisViewFromObject(view:View,`object`:Any):Boolean{returnview==`object`}overridefungetCount():Int{return3}overridefundestroyItem(container:ViewGroup,position:Int,`object`:Any){container.removeView(`object`asView)}}·实现一条导航线跟着Viewpager的页面移动而移动

另一种,简便的方法是实用动画:设置addOnPageChangeListener监听,在onPageScrolled中加入:

varpositionOffsetPd=ScreenDimen.getInstance(context!!).pixToPd(positionOffsetPixels)ViewCompat.animate(homepage_nav_moveLine).translationX(position*screenWidth/3+positionOffsetPd/3+((screenWidth/3-homepage_nav_moveLine.width))/2+10).setDuration(0)在onPageScrollStateChanged中positionOffsetPixels是滑动页面的偏移像素,这里把它转换成dp值。positon是第几页

滑动一次页面,会产生一长串的positionOffsetPixels,系统也会多次调用onPageScrollStateChanged函数,每调用一次,就创建一个duration为0的动画(瞬间跳转,相当于平移)此处疑似有误,ViewCompat.animate(homepage_nav_moveLine).translationX后面接的应该是像素值,所以计算位移直接实用positionOffsetPixels即可,而无需转换为dp值,正确的应该是:

overridefunonPageScrolled(position:Int,positionOffset:Float,positionOffsetPixels:Int){ViewCompat.animate(move_line).translationX(position%3*(screenWidth/3)+positionOffsetPixels/3+(screenWidth/3-move_line.width)/2+0f).setDuration(0)}

·接着要实现滑动子类导航页面时,改变父类导航的字体为加粗

写在onPageSelected,因为这个函数每滑动翻页一次才被调用一次

overridefunonPageSelected(position:Int){homepage_nav_prog.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL))homepage_nav_doc.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL))homepage_nav_source.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL))when(position){0->{homepage_nav_prog.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD))}1->{homepage_nav_doc.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD))}2->{homepage_nav_source.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD))}}}

homepage_nav_prog.setOnClickListener{vp_homePageNav.currentItem=Int.MAX_VALUE/2-Int.MAX_VALUE/2%3}homepage_nav_doc.setOnClickListener{vp_homePageNav.currentItem=Int.MAX_VALUE/2-Int.MAX_VALUE/2%3+1}homepage_nav_source.setOnClickListener{vp_homePageNav.currentItem=Int.MAX_VALUE/2-Int.MAX_VALUE/2%3+2}

另外还有子类导航的点击事件没有设置,但是先就这样吧

源码

其他

通过改变leftMargin值实现线的移动

·当使用homepage_nav_moveLine.layoutParams.leftMargin获取移动线的leftMargin时,提示

cannotinlinebytecidebuiltwithJVMtarget1.8intobytecodethatisbeingbuiltwithJVMtarget1.6

需要在build.grandle中添加

compileOptions{sourceCompatibility=1.8targetCompatibility=1.8}kotlinOptions{jvmTarget="1.8"}·当给它赋值的时候,提示

valcannotbereassigned

查看.leftMargin方法在View类中的定义

inlinevalView.marginLeft:Intget()=(layoutParamsasMarginLayoutParams).leftMargin:0所以只要改成

classScreenDimenprivateconstructor(context:Context){privatevarcontext:Context=nullprivatevarwindowManager:WindowManager=nullprivatevardisplayMetrics:DisplayMetrics=nullinit{windowManager=(context.getSystemService(Context.WINDOW_SERVICE)asWindowManager)displayMetrics=DisplayMetrics()windowManager!!.defaultDisplay.getMetrics(displayMetrics)}companionobject{varinstance:ScreenDimen=nullfungetInstance(context:Context):ScreenDimen{if(instance==null){synchronized(ScreenDimen::class){if(instance==null){instance=ScreenDimen(context)}}}returninstance!!}}//获得屏幕宽度pixelfungetScreenWidthPix():Int{returndisplayMetrics!!.widthPixels}//获得宽度pixelfungetScreenHeightPix():Int{returndisplayMetrics!!.heightPixels}//获取屏幕宽度dpfunscreenWidthDp():Int{varscreenWidthDp=getScreenWidthPix()/displayMetrics!!.densityreturnscreenWidthDp.toInt()}funscreenHeightDp():Int{varscreenHeightDp=getScreenHeightPix()/displayMetrics!!.densityreturnscreenHeightDp.toInt()}}

THE END
1.国家宪法日丨内蒙古“12348”公共法律服务热线平台普法进校园知宪法于心守法律于行——内蒙古“12348”公共法律服务热线平台普法进校园 内蒙古12348公共法律服务热线平台(以下简称12348热线)走进呼和浩特民族学院教育学院举办了以“知宪法于心,守法律于行”主题普法讲座。 讲座现场,12348热线平台的值班律师结合生https://mp.weixin.qq.com/s?__biz=MzA3MzYxOTY2NA==&mid=2651723176&idx=1&sn=ecaccfeb001d87e7acedd14db0f16bec&chksm=85a8e1343ca6fdbbc4c45425f56aa4c9856abbf9ea395980f4abbfb0224a774cb2a81b304aae&scene=27
2.12348四川法网2024-11-18 守正创新完善中国特色社会主义法治体系 2024-11-18 以法治护航改革保障高质量发展 2024-10-11 为经济高质量发展提供有效法治保障 2024-07-15 谱写改革开放大潮中的司法行政新篇章 2024-07-15 社会主义民主法治更加健全 ——党的十八届三中全会以来政治体制改革成就综述 专家https://sc.12348.gov.cn/fzxc/fzxc.jsp
3.法律咨询app哪个比较好?法律咨询app排行榜法律咨询app哪个好用?法律咨询app大全提供了本网站一些实用的,可靠的免费法律咨询软件,比如有专律法律咨询、执行官法律咨询、法管家等。如果在生活工作中遇到任何法律问题,都可以在平台上24小时进行咨询专业律师。提出自己的观点质疑,平台会有专业的法律顾问为您解读案例,分析问题,给您需要的法律保护。包含南宁、北京、http://2265.com/k/falvzixun/
4.华律法律咨询平台官方版app2024免费下载安装最新版华律法律咨询app平台:安卓 大小: 36.3MB 类型:生活 热度: 最新版本(2024-11-29): 1.2.18 安卓手机版 软件介绍 技巧攻略 全部平台 历史版本 标签:视频 介绍 提供高效便捷的法律咨询服务 华律法律咨询平台提供高效、便捷、专业的法律咨询服务,为各地有法律咨询需求的用户提供律师在线咨询服务,法律常识浏览及合同https://m.liqucn.com/rj/110042.wml
5.中国法律服务网客户端官方下载中国法律服务网app是由中国司法部法律服务网官方推出的手机app,这款软件可以为用户提供公共法律的各种服务,在这款中国法律服务网app上可以提供案例查询,律师服务等等多种服务,快来下载吧! 中国法律服务网app官网介绍 中国法律服务网(12348中国法网app)是为社会公众提供公共法律服务的软件终端,具有便捷式手机操控界面,为https://www.fxxz.com/azsoft/500425.html
6.APP?平台电子用心打造尊尚会app官方下载,188金宝博亚洲体育官网手机版下载,足球竞彩哪里买,高清仓库gcck,AG亚洲游戏国际手机版下载3d开奖结果查询近期,云顶国际会所,pgTV3路C0m,九游app棋牌官方正版下载,吉祥娱乐网站0251时时彩购彩大厅,非凡体育app官网下载安装,网站怎么不可以买球了,38彩金彩票网,四喜体育官网入口JDB试玩官网,网赌链接,开元http://m.qo07.cn/20241207/972374.html
7.重庆法网12348app不能使用自2023年11月1日起将“重庆掌上12348”微信公众号功能(重庆法网、村居法务、掌上复议)迁移至“巴渝法声”微信公众号“便民服务”栏目。 您提到的重庆法网12348APP同时停用。此外,建议您前往正规电子市场下载手机应用程序,以免上当受骗。 重庆网络问政平台http://wlwzh5.cqnews.net/H5Page/xq.aspx?id=922486
8.12348中国法网app下载点此纠错 版本:v4.3.4 大小:11.58M 语言:简体中文 类别:生活实用 授权:免费 更新:2024-03-22 权限:查看 厂商:中华人民共和国司法部 MD5:3F3A745C744D14E8AB36095CEF0F9842 包名:com.skytech.sfb12348app 备案:京ICP备13016994号-13A 需要网络 https://www.32r.com/app/7086.html
9.虎斗拳自由搏击下载虎斗拳自由搏击手游app下载扫二维码下载 游戏简介游戏截图 虎斗拳 Fighting Tiger Liberal:对打打杀杀生活产生了厌倦,于是你决定脱离黑帮组织回归平凡生活,不过狂虎帮不会这么简单的放过你的,他们绑架了Shan,为了救出你的挚爱,Gin决定去和狂虎帮进行战斗。 介绍 一款3D动作格斗游戏,你将扮演一个原本是狂虎帮的残暴战斗机器-Gin,但Gin结识了真http://www.1666.com/app/v12348.html
10.中国法律服务网app下载中国法律服务网安卓版下载[生活休闲]Win版下载 猜您喜欢 快看漫画 7.71.0 圆通速递 5.4.0 民生山西 2.1.5 老来网 9.1.2 最右6.2.1 小翼管家 5.0.1 中国法律服务网APP(12348中国法网)是一款便捷的手机应用,致力于向公众提供全面、高效的公共法律服务。用户可通过其直观的操作界面轻松访问案例库、知识库、法律法规库等丰富资源,以及查询人https://www.downza.cn/soft/10431125.html
11.官网安卓入口苹果app积分榜上,海港7分重新回到晋级区,蔚山、中央海岸水手1场不胜。 亚冠东亚区积分榜:海港积7分第6重回晋级区,蔚山5战0分垫底-直播吧 直播吧11月26日讯 亚冠东亚区第5轮先赛2场,海港3-1战胜蔚山,神户3-2战胜中央海岸水手。 content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scalehttp://wap.supaiwang.ltd/440992.html