Eyepetizer-in-Kotlin:一款簡約的小視頻app,帶你走進kotlin

Google在今年的IO大會上宣佈,將Kotlin做爲Android開發的一級語言。做爲緊跟潮流的弄潮兒,對kotlin稍作了解後,發現其有優秀的特性,因此就開始了學習,而Eyepetizer-in-Kotlin即是對kotlin進行學習後的階段性成果。java

1、screenshot

1.啓動界面

2.主界面


3.視頻界面

4.搜索界面

5.緩存界面


Github地址:Eyepetizer-in-Kotlin

2、app介紹

1.數據來源

Eyepetizer-in-Kotlin的全部數據來源自開眼視頻,不涉及任何商業用途,有如侵權,當即刪除。android

具體api接口能夠參考項目中的Api類。git

2.功能

含有開眼視頻每日推薦、熱門及分類小視頻
支持視頻播放,包含全屏播放等特性
支持關鍵詞搜索,想看什麼看什麼
記錄歷史觀看,以及緩存視頻,本地播放等功能github

3.特色

做爲學習kotlin的一款app,在擼代碼的過程當中學習kotlin的語法及特性。編程

Eyepetizer-in-Kotlin適合初學者做爲學習kotlin語言的一個項目,能夠在作項目的同時體驗到kotlin語言的優勢。api

3、kotlin特性

在作Eyepetizer-in-Kotlin的過程當中,瞭解到了許多kotlin的特性,用在平常開發中,大大提升了開發效率,下面就簡單介紹下在項目中用到的幾個重要的kotlin特性。緩存

(1) 和findViewById說再見

咱們能夠直接使用xml中對應的id,而且import對應的文件,不在須要findViewByIdbash

import kotlinx.android.synthetic.main.activity_watch.*
.........
tv_hint.visibility = View.VISIBLE
tv_hint.text = "告別findViewById"複製代碼
(2) 延遲加載

延遲加載有幾個好處。首先因爲加載時機推遲到了變量被訪問時,所以它能夠提升應用的啓動速度。其次,這樣的延遲加載也有更高的內存效率。app

val mModel: FindDetailModel by lazy {
        FindDetailModel()
    }複製代碼

當第一次使用mModle的時候進行初始化ide

lateinit var mAdapter: DownloadAdapter複製代碼

在任何想進行初始化的位置進行初始化

(3) Lambdas 表達式

Lambdas 表達式在減小源文件中代碼的總行數的同時,也支持函數式編程。

使用 lambdas 表示式時,onClickListener 的用法以下:

holder?.itemView?.setOnClickListener {
            var keyWord = list?.get(position)
            var intent : Intent = Intent(context,ResultActivity::class.java)
            intent.putExtra("keyWord",keyWord)
            context?.startActivity(intent)
            mDialogListener?.onDismiss()
        }複製代碼
(4) 數據類

數據類簡化了類的定義,自動爲類添加equals(),hashCode(),copy() 和toString() 方法。它明肯定義了 model 類的意圖,以及應該包含什麼內容,同時將純數據與業務邏輯分離開來。

data class VideoBean(var feed:String?,var title:String?,var description:String?,
                     var duration: Long?,var playUrl: String?,var category: String?,
                     var blurred : String?,var collect:Int?,var share:Int?,var reply:Int?,var time:Long) : Parcelable,Serializable {}複製代碼

就是如此簡單,對比之前動輒幾百行的數據類,簡潔了太多。若是想實現序列化Parcelable,能夠下載支持kotlin序列化的插件,一鍵實現,很是方便。

(5) 集合過濾

經過使用 Kotlin 的集合過濾功能,咱們可使代碼變得更清晰簡潔。

bean.issueList!!
                .flatMap { it.itemList!! }
                .filter { it.type.equals("video") }
                .forEach { mList.add(it) }複製代碼

經過以上過濾,即可以獲得咱們想要的內容。

(6) 擴展

擴展的好處在於它容許咱們爲一個類添加功能同時無需繼承它。例如,你是否曾經但願 Context 有某些方法,好比 showToast()?使用擴展,你能夠很容易實現這個功能:

fun Context.showToast(message: String) : Toast {
    var toast : Toast = Toast.makeText(this,message,Toast.LENGTH_SHORT)
    toast.setGravity(Gravity.CENTER,0,0)
    toast.show()
    return toast
}複製代碼
(7) 其餘特性

字符串

Kotlin在字符串之中可使用變量,相對與在Java中的字符串拼接,更讓人感受到舒服。

holder?.tv_detail?.text = "發佈於 $category / $realMinute:$realSecond"複製代碼

when

Kotlin中when的出現替代了switch,但其功能更增強大。

override fun onClick(v: View?) {
        when(v?.id){
            R.id.tv_watch ->{
                var intent = Intent(activity,WatchActivity::class.java)
                startActivity(intent)
            }
            R.id.tv_advise ->{
                var intent = Intent(activity,AdviseActivity::class.java)
                startActivity(intent)
            }
            R.id.tv_save ->{
                var intent = Intent(activity,CacheActivity::class.java)
                startActivity(intent)
            }
        }
    }複製代碼

固然Kotlin的特性不止如此,還有更多高階的特性如:高階函數, Anko等,這些特性還需進一步學習應用

4、爲何要學Kotlin?

關於爲何要學Kotlin,在Google IO大會剛把kotlin做爲一級開發語言後就已經有了不少的討論。
當時學習的必要性還不明確,過了幾個月以後,咱們再來看一下學習的必要性。

1.語言層面

經過以上分析,咱們能夠知道kotlin對於android開發的優點,同時kotlin也是基於JVM的一門靜態語言,與Java完美兼容,不存在項目遷移等問題。除此以外,學習成本也比較低,很好入門。固然若是想要達到熟練程度,還需繼續練習。

2.形勢層面

國外:Pinterest、Evernote、Uber等企業已經開始應用,Google也在一些小項目中應用kotlin,Google一些專家很是看好Kotlin。

國內:據我所知,美團已經開始使用kotlin。一些大型互聯網公司因爲業務導向,開發壓力重,不敢輕易使用kotlin,不過它們已經開始躍躍欲試,着手在新的項目中使用kotlin。

講了這麼多,學習kotlin雖然不是必須的,可是應對趨勢發展,而且學習成本不高,那麼多掌握一門技能,百利而無一害。

Github地址:github.com/LRH1993/Eye…

喜歡就給個star,但願能對你們學習kotlin有幫助!

相關文章
相關標籤/搜索