【Kotlin】FarawayPlayer

主宰稳场 提交于 2020-02-09 03:31:25

ps:一个提醒机制

  抛出异常:kotlin.NotImplementedError: An operation is not implemented: not implemented

    在实现接口的时候IDE会自动为我们添加上:

    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.

    “TODO("not implemented")”这句代码,这句代码在运行的时候会抛出以上异常,这样做的好处是促使我们去实现接口方法或者手动删掉这句代码。

https://www.cnblogs.com/claruarius/p/GenyMotion_intelliJ_config.html】使用Genymotion

1.在app.buildgradle中的依赖添加anko库

//app目录添加anko库
dependencies {
    implementation "org.jetbrains.anko:anko:$anko_version"
}

implementation "org.jetbrains.anko:anko:0.10.8"


https://github.com/Kotlin/anko
2.anko库由gradle.buildgradle中jcenter()库自动获取

https://bintray.com/jetbrains/anko/anko

3.anko好处例如简化Toast

toast("Hi there!")
toast(R.string.message)取代  Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();

4.配置androidManifest.xml文件 设置主类界面与全屏显示

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.ywjh.farawayplayer">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">
        <activity android:name=".ui.activity.SplashActivity"
            android:theme="@style/AppTheme.FullScreen">//xml调用全屏
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ui.activity.MainActivity"/>
    </application>

</manifest>

4.2配置apptheme全屏组件与无toolbar“css”

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <style name="AppTheme.FullScreen">
        <item name="windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
    </style>

    <style name="pop">
        <item name="android:windowEnterAnimation">@anim/pop_enter</item>
        <item name="android:windowExitAnimation">@anim/pop_exit</item>
    </style>
</resources>

4.3创建背景xml,调用FullScreen

src会有空白设置scalex,y进行等比拉伸

background随屏幕拉伸

<ImageView
    android:id="@+id/imageView"
    android:scaleX="1.5"
    android:scaleY="1.5"
    android:scaleType="centerCrop"
    android:src="@mipmap/default_splash_bg"//背景background 与src
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

 

5.主界面封装抽取tolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize4"//根据主题适配不同高度
    android:orientation="vertical">


</android.support.v7.widget.Toolbar>

6.使用插件库引入第三方控件:https://github.com/roughike/BottomBar 底部BottomBar  打开有xml配置声明

关于规约 id必须为id=xxx  以后可以判断调用 android:id会报错

<tabs>
    <tab
        id="@+id/tab_favorites"
        icon="@drawable/ic_favorites"
        title="Favorites"
        barColorWhenSelected="#5D4037" />
    <!-- You can use @color resources too! -->
</tabs>

Gimme that Gradle sweetness, pls?

gradle加点小cookie

 

compile 'com.roughike:bottom-bar:2.3.1'

配置Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
<!--<include layout="@layout/toolbar"/>-->
   <FrameLayout
       android:id="@+id/container"
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:layout_weight="1"/>

   <com.roughike.bottombar.BottomBar
       android:id="@+id/bottomBar"
       android:layout_width="match_parent"
       android:layout_height="60dp"
       android:layout_alignParentBottom="true"
       app:bb_tabXmlResource="@xml/bottombar_tabs" />

</LinearLayout>

7.关于惰性加载

线程安全且初始化toolbar用到的时候才findviewbyid

    override val toolbar by lazy{find<Toolbar>(R.id.tb_toolbar)}

8.发送网络请求->通过网络框架   不 使用二次封装好的框架 直接使用okhttp自己封装

https://github.com/square/okhttp

话说安卓8.0对http有特殊处理

9.0不是https都没法玩 我滴妈 去tm的新特性 让我整半天

问了问小胖子百度了一下终于搞定了

https://www.jianshu.com/p/6369d9616c13

https://blog.csdn.net/it_mr_lu/article/details/89022807

感谢,配置下东西就好了

ps:打印异常

e.printStackTrace()这个意外的很好用==之前都是一个个地方找断言9.第三框架 加载网上抓取的图片

https://github.com/square/picasso

添加依赖

implementation 'com.squareup.picasso:picasso:2.71828'

10.添加下拉刷新效果可以利用谷歌自带的控件 在xml布局里添加

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout>包裹

在Fragment添加

refreshLayout.setColorSchemeColors(Color.RED,Color.YELLOW,Color.GREEN)三色交叠刷新 传int也行11.列表滑动监听
  override fun initListener(){
        //初始化layout的 recycler_view1
        recycler_view1.layoutManager=LinearLayoutManager(context)
        //适配 调用HomeAdapter
        recycler_view1.adapter=adapter
//        谷歌自带的刷新效果默认有点丑 初始化刷新控件
        refreshLayout.setColorSchemeColors(Color.RED,Color.YELLOW,Color.GREEN)
    //设置刷新监听
//        可选1.内部只有一个方法 直接打开 2.和之前一样传一个匿名内部类
        refreshLayout.setOnRefreshListener {
        //加载刷新数据
            loadDatas()
        }
        //监听列表滑动 定义一个匿名内部类
        recycler_view1.addOnScrollListener(object:RecyclerView.OnScrollListener(){
           //滑动状态的改变
            //点击左边角标 可以看源类与三种状态
            override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
               //上拉加载更多  滑动到最后并且停止时 所以 不用监听onScrolled
        /*        when(newState){
                    //空闲状态  所以监听idel状态即可
                    RecyclerView.SCROLL_STATE_IDLE ->{
                        println("idel")
                    }
                    //拖动状态
                    RecyclerView.SCROLL_STATE_DRAGGING ->{
                        println("drag")
                    }
                    RecyclerView.SCROLL_STATE_SETTLING ->{
                        println("setting")
                    }
                }*/
               if(newState==RecyclerView.SCROLL_STATE_IDLE){
                   //并且监听是否是最后一条
                   //要求是LinearLayoutManager 才是列表
                   val layoutManager=recycler_view1.layoutManager
//                  判断是线性layout
                    if(layoutManager is LinearLayoutManager){
                        //后面不用写强转 定义类型 自己就会转换
                        val manager:LinearLayoutManager=layoutManager
                        val lastPosition=manager.findLastVisibleItemPosition()
                        if (lastPosition==adapter.itemCount-1){
                            //最后一条显示了
//                            loadMore(adapter.itemCount-1)

                        }
                    }
               }



            }

            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                //x y 偏移量  onScrolled会一直执行 打印偏移量
                println("onscrolled dx=$dx dy=$dy")
            }
        })
    }

12.发现个问题

13.kotlin一种写法

list?.let {  this.list.clear()
      this.list.addAll(list)//牛逼
      notifyDataSetChanged()//刷新一下 }
   
}

若list不为空 则执行let内方法,为空则不执行

14.封装网络请求 使用google volley框架工具

https://blog.csdn.net/u012602304/article/details/79170137

详细的可以参考这位dalao的博客

1.一个http网络请求(request)

1.1请求方式(包含地址)  1.2请求的回调

2.专门的网络请求类(如 mQueue.add(网络请求))  就可以发送网络请求了

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!