Android RecycleView 슬라이딩 정지 후 자동 흡착 효과 구현 코드(슬라이딩 위치)

최근 에 목록 이 미 끄 러 진 후 첫 번 째 항목 은 상단 과 정렬 해 야 합 니 다.
인터넷 에서 찾다  공식 지원 휴지통 발견+ LinearSnapHelper 는 실현 할 수 있 습 니 다.
근 데 제 가 실 기 를 하 다가 렉 이 걸 리 더 라 고요.렉 이 걸 리 더 라 고요.렉 이 잘 안 걸 려 요.
생각 하 다  됐어.소스 보기 귀찮아.  혼자 쓰 는 게 낫 겠 다.   
효과 그림:

코드 는 다음 과 같 습 니 다.주석 이 명확 합 니 다. 

package com.example.testapp
 
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.testapp.code.note.JoinData
import com.example.testapp.code.note.TheatreJoinerAdapter
import kotlinx.android.synthetic.main.activity_main.*
 
class MainActivity : AppCompatActivity() {
 
 //isUserControl              
 @Volatile
 private var isUserControl = false
 var runnable = Runnable {
  smoothScrollToPosition()//  rcy  
 }
 
 val list = arrayListOf<JoinData>()
 override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)
  for (i in 0..50) {
   list.add(JoinData("  ${i}", i))
  }
  rcy.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
  var adapter = TheatreJoinerAdapter(this, list)
  rcy.adapter = adapter
  rcy.addOnScrollListener(object : RecyclerView.OnScrollListener() {
   override fun onScrolled(r: RecyclerView, dx: Int, dy: Int) {
    super.onScrolled(r, dx, dy)
    //         
    if (r.scrollState == RecyclerView.SCROLL_STATE_SETTLING && !isUserControl) {//    
     //       -3 .. 3                          
     if (dy in -3..3) {//    
      r.stopScroll()
     }
    }
   }
 
   override fun onScrollStateChanged(r: RecyclerView, newState: Int) {
    super.onScrollStateChanged(r, newState)
    if (newState == RecyclerView.SCROLL_STATE_IDLE) {//    
     if (!isUserControl) {
      rcy.postDelayed(runnable, 200)//200       
     }
    }
    if (r.scrollState != RecyclerView.SCROLL_STATE_SETTLING) {//     
     isUserControl = false
    }
   }
  })
 }
 
 private fun smoothScrollToPosition() {
  isUserControl = true
  val stickyInfoView = rcy.getChildAt(0) //    View    view
  val bottom = stickyInfoView.bottom//  view   rcy     
  val height = stickyInfoView.measuredHeight//  view  
  if (bottom != height) {//              
   if (bottom >= (height / 2)) {//  view          
    rcy.smoothScrollBy(0, -(height - bottom))//    
   } else {
    rcy.smoothScrollBy(0, bottom)//    
   }
  }
 }
}
끝나다   
안 드 로 이 드 Recycle View 슬라이딩 이 멈 춘 후 자동 흡착 효과 에 대한 구현 코드(슬라이딩 포 지 셔 닝)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 안 드 로 이 드 Recycle View 슬라이딩 포 지 셔 닝 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기