A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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,一点不讲道理的方便

  1. plugin: 'kotlin-android-extensions'
复制代码

同步一下,好了直接调用布局资源里面的id就行,id就代表了这个控件了,其他不用管了,再退一步说,我不想用XML布局来写控件,太l麻烦,一个页面要两个东西合并才能维持,又不是生小孩,太麻烦,可以,下个anko倚赖,xml你也可以不用了,直接"class"(这里是kt)里面写.

2.构建工具类

当然这里我就构建了一个包,kotlin不是Java没有类对函数的严格死控,kotlin有种函数叫包内函数,可见kotlin写法比较随意(我认为),
所以我的工具类就一个包了,就这么写了,各位大佬不要计较
  1. /**
  2. * When:  --- 2017/10/8---
  3. * Time:  --- 15:00---
  4. * Function:
  5. */
  6. //Log.d扩展方法,简化log的使用.可以起到 "String".log 直接打印日志的效果
  7. fun String.log(){
  8.     Log.d("ben",this)
  9. }
  10. //调用sp数据库的get方法
  11. fun getSpBoolean(context:Context,key:String):Boolean
  12.         = context.getSharedPreferences(Fileds.spName,0).getBoolean(key,false)
  13. //调用sp数据库的set方法
  14. fun setSpBoolean(context:Context,key:String,value:Boolean)
  15.         = context.getSharedPreferences(Fileds.spName,0).edit().putBoolean(key, value).apply()

复制代码

sp就是控制是否是第一次进入的依据了,print在intellj Idea可以在控制台打印,android studio不能现实,所以就用log顺便加个的扩展方法方便调用

3.构建全局调用的变量

本来想使用data class ,但是一面就一行代码,太孤零零了,所以本着java板砖工的天性用了伴生对象
  1. class Fileds{
  2.         val spName="smartBjSharePreference"
  3.         val unTutoiral="JUMPTUTOIRAL"
  4. }
  5. //data class Fileds(.....) 效果应该是一样(更简略,只是Java敲多了不习惯这种数据类的写法)
复制代码




#过渡界面的编写


导入ViewPagerIndicator相关倚赖或者资源

  1. class TutorialActivity : BaseActivity(){
  2.     val mImages = arrayOf(R.drawable.guide_1, R.drawable.guide_2, R.drawable.guide_3)
  3.     override fun getLayoutId(): Int =R.layout.activity_tutorial
  4.     //控件初始化
  5.     override fun initWidget() {
  6.         viewPagerTutorial.adapter=pagerAdapterTutorial//ViewPager绑定适配
  7.         circlePageIndicator.setViewPager(viewPagerTutorial)
  8.         circlePageIndicator.setOnPageChangeListener(pagerChange)//设置ViewPager点击事件
  9.         but_Tutorial.setOnClickListener{butOnclick()}//设置按钮点击事件
  10.     }
  11.     //ViewPager的事件监听
  12.     private val pagerChange=object:ViewPager.OnPageChangeListener{
  13.         override fun onPageScrollStateChanged(state: Int) {
  14.         }
  15.         override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
  16.         }
  17.         override fun onPageSelected(position: Int) {
  18.             if(position==mImages.size-1){
  19.                 but_Tutorial.visibility= VISIBLE
  20.             }else{
  21.                 but_Tutorial.visibility= GONE
  22.             }
  23.         }
  24.     }
  25.     //PagerADapter编写
  26.     private val pagerAdapterTutorial=object :PagerAdapter(){
  27.         //判断是否标识匹配
  28.         override fun isViewFromObject(view: View?, `object`: Any?): Boolean= view==`object`
  29.         //获取资源需求的页数
  30.         override fun getCount(): Int=mImages.size
  31.         override fun instantiateItem(container: ViewGroup?, position: Int): Any{
  32.             val image=ImageView(this@TutorialActivity).apply {
  33.                 scaleType=ImageView.ScaleType.FIT_XY
  34.                 setImageResource(mImages[position])
  35.             }
  36.             //绑定到ViewPage的页面上才会有显示
  37.             container?.addView(image)
  38.             return image
  39.         }
  40.        override fun destroyItem(container: ViewGroup?, position: Int, ob: Any?) {
  41.             container!!.removeView(ob as View?)
  42.         }
  43.     }
  44.     private fun butOnclick(){
  45.         intentFunction(MainActivity::class.java)
  46.         finish()
  47.     }
  48. }
复制代码


总结
   感觉除了监听,声明,好像也没节省多少代码,java过渡界面源代码我写了120-130行(当然是没有注解的),这才节省了一半代码,不科学,难道是假的kotlin,,但是我要辩解一下这里kotlin的很多新特性,高级方法这里并没有体现出来,所以看着,还是有些臃肿,但是,怎么说呢,毕竟本人菜鸟级别水准,暂时就这么看着吧,(删掉备注差不多了),再次希望大家多多指点,多多交流,最后感谢大家不厌其烦把这些废话看完.....这次先就到这里了(完善一下代码进度晚上,早点睡,下次心血来潮再扯扯这个吧)

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马