本帖最后由 1763982023 于 2017-11-19 11:47 编辑
前言
说是前言,算是介绍吧,现在最火的新兴语言是啥,异口同声-Phython,其实python早就火了,只是国内后知后觉,那么问题来了,WHY?很简单嘛,python是一种全栈语言(kotlin也是),python可以代替很多语言,你要开心,用它写android也是可以的,而且python和kotlin的语法很像,都是以简洁精炼著称(书写方式也很像),有人用python写前端后台(kotlin也能),也很开心嘛,那么kotlin呢,kotlin是一门全栈XX,它能代替C,javaScript,java语言等(我看过用它写html的视频,没懂),那为什么它在android上这么火呢,因为它无缝连接java(不解释),最主要还是谷歌收它做了"亲"儿子,和Java一样的亲,所以在谷歌的大力宣传下,才火大发了,像之前的scala不温不火,一个是太糟心的学习门槛(反正我不会),一个是它不是全栈性质的(这才是重点),这是历史的必然,不能拘泥一种,或者为了全栈而把自己变成全栈人物,结果连基础都要记好几遍,浪费生命,以上是我对kotlin的理解,你要有意见,我也没办法,毕竟我也是看别人才知道!!!!最后引用一句网络名言:人生苦短,快用kotlin
过渡页面
什么叫过度页面.其实我也不好说,我不知道他的真名(忘了),其实就是第一次打开app闪屏finish()后的一个页面,经过finsh()后才能跳到主页面,如同优酷APP刚打开有个广告页面上面有计时跳转的页面一样:
#准备工作
1.让findViewById() 成为回忆
有人想到ButterKnife,其实kotlin也可以兼容ButterKnife,只需要在builder里面添加一行代码(我忘了),当让你不嫌麻烦,现在好像也新出了个KotlinKnife的玩意,但是studio里面下不起来,要去网上下载再导入,但是作为一个kotlin,我不想麻烦我想老老实实做一个有lazy{...} 函数的kotlin,所以我在builder里面加了一行,butterKnife还要绑定控件,但这里,完全不需要,你不需要在多做任何一步的操作了,你只需要拿来用就行,这就是kotlin,一点不讲道理的方便
- plugin: 'kotlin-android-extensions'
复制代码
同步一下,好了直接调用布局资源里面的id就行,id就代表了这个控件了,其他不用管了,再退一步说,我不想用XML布局来写控件,太l麻烦,一个页面要两个东西合并才能维持,又不是生小孩,太麻烦,可以,下个anko倚赖,xml你也可以不用了,直接"class"(这里是kt)里面写.
2.构建工具类
当然这里我就构建了一个包,kotlin不是Java没有类对函数的严格死控,kotlin有种函数叫包内函数,可见kotlin写法比较随意(我认为),
所以我的工具类就一个包了,就这么写了,各位大佬不要计较
- /**
- * When: --- 2017/10/8---
- * Time: --- 15:00---
- * Function:
- */
- //Log.d扩展方法,简化log的使用.可以起到 "String".log 直接打印日志的效果
- fun String.log(){
- Log.d("ben",this)
- }
- //调用sp数据库的get方法
- fun getSpBoolean(context:Context,key:String):Boolean
- = context.getSharedPreferences(Fileds.spName,0).getBoolean(key,false)
- //调用sp数据库的set方法
- fun setSpBoolean(context:Context,key:String,value:Boolean)
- = context.getSharedPreferences(Fileds.spName,0).edit().putBoolean(key, value).apply()
复制代码
sp就是控制是否是第一次进入的依据了,print在intellj Idea可以在控制台打印,android studio不能现实,所以就用log顺便加个的扩展方法方便调用
3.构建全局调用的变量
本来想使用data class ,但是一面就一行代码,太孤零零了,所以本着java板砖工的天性用了伴生对象
- class Fileds{
- val spName="smartBjSharePreference"
- val unTutoiral="JUMPTUTOIRAL"
- }
- //data class Fileds(.....) 效果应该是一样(更简略,只是Java敲多了不习惯这种数据类的写法)
复制代码
#过渡界面的编写
导入ViewPagerIndicator相关倚赖或者资源
- class TutorialActivity : BaseActivity(){
- val mImages = arrayOf(R.drawable.guide_1, R.drawable.guide_2, R.drawable.guide_3)
- override fun getLayoutId(): Int =R.layout.activity_tutorial
- //控件初始化
- override fun initWidget() {
- viewPagerTutorial.adapter=pagerAdapterTutorial//ViewPager绑定适配
- circlePageIndicator.setViewPager(viewPagerTutorial)
- circlePageIndicator.setOnPageChangeListener(pagerChange)//设置ViewPager点击事件
- but_Tutorial.setOnClickListener{butOnclick()}//设置按钮点击事件
- }
- //ViewPager的事件监听
- private val pagerChange=object:ViewPager.OnPageChangeListener{
- override fun onPageScrollStateChanged(state: Int) {
- }
- override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
- }
- override fun onPageSelected(position: Int) {
- if(position==mImages.size-1){
- but_Tutorial.visibility= VISIBLE
- }else{
- but_Tutorial.visibility= GONE
- }
- }
- }
- //PagerADapter编写
- private val pagerAdapterTutorial=object :PagerAdapter(){
- //判断是否标识匹配
- override fun isViewFromObject(view: View?, `object`: Any?): Boolean= view==`object`
- //获取资源需求的页数
- override fun getCount(): Int=mImages.size
- override fun instantiateItem(container: ViewGroup?, position: Int): Any{
- val image=ImageView(this@TutorialActivity).apply {
- scaleType=ImageView.ScaleType.FIT_XY
- setImageResource(mImages[position])
- }
- //绑定到ViewPage的页面上才会有显示
- container?.addView(image)
- return image
- }
- override fun destroyItem(container: ViewGroup?, position: Int, ob: Any?) {
- container!!.removeView(ob as View?)
- }
- }
- private fun butOnclick(){
- intentFunction(MainActivity::class.java)
- finish()
- }
- }
复制代码
总结
感觉除了监听,声明,好像也没节省多少代码,java过渡界面源代码我写了120-130行(当然是没有注解的),这才节省了一半代码,不科学,难道是假的kotlin,,但是我要辩解一下这里kotlin的很多新特性,高级方法这里并没有体现出来,所以看着,还是有些臃肿,但是,怎么说呢,毕竟本人菜鸟级别水准,暂时就这么看着吧,(删掉备注差不多了),再次希望大家多多指点,多多交流,最后感谢大家不厌其烦把这些废话看完.....这次先就到这里了(完善一下代码进度晚上,早点睡,下次心血来潮再扯扯这个吧) |
|