黑马程序员技术交流社区

标题: 00-kt精简新闻客户端之Splash+Base界面 [打印本页]

作者: 1763982023    时间: 2017-10-8 15:57
标题: 00-kt精简新闻客户端之Splash+Base界面
本帖最后由 1763982023 于 2017-11-18 16:10 编辑

前言
         kotlin的语法规则和Java的语法不一样,对于初学者的我来说,就是一场语言灾难,因为Java虽说笨重,但是笨有笨的好处啊,比如说易于上手,而kotlin过于聪慧,让我一下感觉无法适从这种语言的聪慧,所以就以一个新闻客户端demo来解读一下kotlin世界的部分精彩.
        重点:用kotlin去写android的目的是为了减少代码的数量和增加灵活性,如果代码没有减少到原有的1/3,我们可能使用了假的kotlin.

要求
        前提:我们有个基类(kotlin配置我就不配了,反正3.0后就转正了,不需要配了)
        1.透明度从无到有
        2.图片旋转360出现
        3.图片有大到小缩放

     #基类

      
[AppleScript] 纯文本查看 复制代码
abstract class BaseActivity : Activity(){
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //构建setContent方法
        setContentView(getLayoutId())
        initWidget()
    }
    //设置初始化方法
    open fun initWidget(){
    }
    //抽象必须实现的布局设置方法
    abstract fun getLayoutId(): Int
    //添加可能用到的跳转方法
    /**
     * 这里的Class<Any>或者是Class<*>表示任意类的类型
     */
    open fun intentFunction(activityClass:Class<*>){
        startActivity(Intent(this,activityClass))
    }
}



#属性动画的使用

经过思考,补间动画(tweenAnimation)我觉得太他喵的累赘了,用啥子3.0的动画啊,都是上世纪的api了,直接来属性动画简单明了.
思路:
1.先让对象缩放到0,透明度为0,,为什么这样设置呢,因为简单,不需要坑长的ObjectorAnimator点来点去的调方法,用最简单的方法就能完事.

  1. splash_image.apply {
  2.             scaleX=0f
  3.             scaleY=0f
  4.             alpha=0f
  5.         }
复制代码


不解释基础语法+基础的高阶函数用法

思路:
2.让图片旋转并且在旋转的,放大,充实,最后动画结束后需要跳转

  1. splash_image.animate().apply{
  2.             scaleX(1f)
  3.             scaleY(1f)
  4.             alpha(1f)
  5.             rotation(360f)
  6.             duration = 1500
  7.             //objecct之用法
  8.             setListener(object : Animator.AnimatorListener{
  9.                 override fun onAnimationRepeat(animation: Animator?) {
  10.                 }
  11.                 override fun onAnimationCancel(animation: Animator?) {
  12.                 }
  13.                 override fun onAnimationStart(animation: Animator?) {
  14.                 }
  15.                 override fun onAnimationEnd(animation: Animator?) {
  16.                     //跳转事件
  17.                     intentSwitch()
  18.                 }
  19.             })
  20.         }
复制代码

Java用习惯了,自然觉得new 个内部类不就出来了相应的内部类了吗,但是kotlin写到小括号里面就没有了,就没有了,真的没有提示了,所以耗了很久,难受了:-(,看一下监听器的源码吧,点开setListener的源码,发现内部类是静态的static,,让人联想到,kotlin中的伴生对象,然后就是object,没错就是object,结果一套,就能用了,当然原理不是这样.

在此顺便介绍一下object用法回顾:
1/对象表达式,可以当point使,但point是二维的,太low了.
2/对象声明,相当于java里面的static用法
3/伴生对象,相当于Java的静态方法

对这些不太清楚的老哥们找度娘,就明白了
当然还有关于属性动画的由来和原理,大家有兴趣也可以百度一下






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2