美文网首页
RecyclerView滑动监听

RecyclerView滑动监听

作者: lixinxin | 来源:发表于2020-05-15 10:16 被阅读0次

    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()
    
    
    }
    

    }

    相关文章

      网友评论

          本文标题:RecyclerView滑动监听

          本文链接:https://www.haomeiwen.com/subject/wyiqohtx.html