RecyclerView滑动监听

2020-05-15  本文已影响0人  lixinxin

package com.lixinxinlove.recyclerviewdemo

import android.content.Context
import android.content.res.Resources
import android.os.Bundle
import android.util.Log
import android.util.TypedValue
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.lixinxinlove.recyclerviewdemo.adapter.MyAdapter
import okhttp3.*
import java.io.IOException
import java.util.*
import java.util.concurrent.TimeUnit

class MainActivity : AppCompatActivity() {

private lateinit var fixedLayout: LinearLayout
private lateinit var recyclerView: RecyclerView
private lateinit var mAdapter: MyAdapter
private lateinit var mData: MutableList<String>
private lateinit var headerView: LinearLayout
private lateinit var innerLayout: LinearLayout
private lateinit var titleView: TextView
private lateinit var banner: View

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    fixedLayout = findViewById(R.id.flex_layout)
    recyclerView = findViewById(R.id.recycler_View)
    recyclerView.layoutManager = LinearLayoutManager(this)
    headerView = View.inflate(this, R.layout.hander_view, null) as LinearLayout
    innerLayout = headerView!!.findViewById(R.id.inner_layout)
    titleView = headerView!!.findViewById(R.id.title_view)
    banner = headerView!!.findViewById(R.id.banner)
    initData()
    initListener()
}

private fun initData() {
    mData = ArrayList()
    for (i in 0..99) {
        mData.add("lee$i")
    }
    mAdapter = MyAdapter(mData)
    mAdapter.addHeaderView(headerView)
    recyclerView.adapter = mAdapter
}

var mmRvScrollY = 0
private fun initListener() {

    recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {

        override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
            super.onScrollStateChanged(recyclerView, newState)
            Log.e("onScrolled", "newState: $newState")
        }

        override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
            super.onScrolled(recyclerView, dx, dy)
            mmRvScrollY += dy
            Log.e("onScrolled", "onScrolled: mmRvScrollY: $mmRvScrollY, dy: $dy")
            changeUI(mmRvScrollY)
        }
    })
}

private fun changeUI(y: Int) {
    //滑动到选择日期 悬浮
    if (y >= banner.height) {
        if (titleView.parent !== fixedLayout) {
            innerLayout.removeView(titleView)
            fixedLayout.addView(titleView)
        }
    } else {
        if (titleView.parent !== innerLayout) {
            fixedLayout.removeView(titleView)
            innerLayout.addView(titleView)
        }
    }
}

/**
 * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
 */
fun dip2px(context: Context, dpValue: Float): Int {
    val scale = context.resources.displayMetrics.density
    return (dpValue * scale + 0.5f).toInt()
}

fun dp2px(dpValue: Float): Float {
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, Resources.getSystem().displayMetrics)
}

fun onPos(view: View?) {
    recyclerView.scrollToPosition(0)
    mmRvScrollY = 0
    changeUI(mmRvScrollY)

    recyclerView.postDelayed({ recyclerView.scrollBy(0, banner.height) }, 50)

    recyclerView.postDelayed({
        recyclerView.scrollToPosition(0)
        mmRvScrollY = 0
        changeUI(mmRvScrollY)
    }, 3000)

    // onOkHttp()
    // startActivity(Intent(this,GestureDetectorActivity::class.java))
}

fun onOkHttp() {

    val mOkHttp = OkHttpClient.Builder()
            .readTimeout(30, TimeUnit.SECONDS)
            .writeTimeout(30, TimeUnit.SECONDS)
            .connectTimeout(30, TimeUnit.SECONDS)
            .build()

    val mRequest: Request = Request.Builder()
            .get()
            .url("https:www.baidu.com")
            .build()

    val mCall: Call = mOkHttp.newCall(mRequest)

    Log.e("Callback", Thread.currentThread().name)

    mCall.enqueue(object : Callback {
        override fun onFailure(call: Call, e: IOException) {
            Log.e("Callback", "请求失败")
        }

        override fun onResponse(call: Call, response: Response) {
            // Log.e("Callback", response.body()!!.string())
            Log.e("Callback", Thread.currentThread().name)
        }
    })

    mCall.cancel()


}

}

上一篇下一篇

猜你喜欢

热点阅读