android 무한 순환 윤방 실현

2391 단어 학습 노트
일주 잔말 말고 바로 그림 효과 보기
이주 핵심은 바로 recyclerview이다. 그 자체에 smoothScrollToPosition()이 지정된 위치로 미끄러진다. 그러나 이 과정은 매우 빠르고 우리가 원하는 효과가 아니다. 이 방법에서 최종적으로 호출된 것은 LinearLayoutManager의 smoothScrollToPosition() 방법이다. 그래서 우리는 LinearLayoutManager의 smoothScrollToPosition() 방법을 다시 써서 미끄러지는 속도를 제어해야 한다.다음 코드:
import android.content.Context
import android.graphics.PointF
import android.util.DisplayMetrics
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.LinearSmoothScroller
import androidx.recyclerview.widget.RecyclerView

class AutoScrollLayoutManager(context: Context?) : LinearLayoutManager(context) {
    //          
    override fun smoothScrollToPosition(recyclerView: RecyclerView, state: RecyclerView.State, position: Int) {
        val linearSmoothScroller: LinearSmoothScroller = object : LinearSmoothScroller(recyclerView.context) {
            override fun computeScrollVectorForPosition(targetPosition: Int): PointF? {
                return [email protected](targetPosition)
            }

            override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float {
                //              ,         ;
                return 40f / displayMetrics.density
            }
        }
        linearSmoothScroller.targetPosition = position
        startSmoothScroll(linearSmoothScroller)
    }
}

3주 계속 굴러가기 위해서는 adapter에서 itemCount를 Int.MAX 로 되돌려야 합니다VALUE:
override fun getItemCount(): Int {
            return if (mDataList.isNotEmpty()) Int.MAX_VALUE else 0
        }

삼주 그리고 일반적인 Linear Layout Manager처럼 Recyclerview에 설정하고 Recyclerview에 Adapter를 설정한 후 Recyclerview를 호출합니다.smoothScrollToPosition(Int.MAX VALUE), 빨간색은 Int의 최대치, 즉 계속 굴러가는 것을 주의해야 한다. 그러면 문제가 생겼다. 데이터는 유한하기 때문에 데이터 순환을 실현해야 한다. adapter의 onBindViewHolder(holder: RecyclerView. ViewHolder,position: Int) 방법에서 우리는 사용자 정의 index로 다음 위치의 데이터 대상을 얻는다.index가 데이터 수량의 길이일 때마다 다시 순환해야 한다고 설명하기 때문에 index를 0으로 다시 설정합니다. 코드는 다음과 같습니다.
 var index = 0
 override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
                    if (index % (mDataList.size - 1) == 0){
                        //           
                        index = 0
                    }
                    val horizontalGame = mDataList[index++]
}

좋은 웹페이지 즐겨찾기