Я создал несколько пользовательских представлений, они просты в использовании. Один из них представляет собой вид рециркулятора, который работает как счетчик, чтобы показать время (в минутах или часах), другой - это макет ограничения, который содержит два thoose, один для часов, другой для минут. Но когда я открываю фрагмент, который содержит четыре из этого пользовательского просмотра, это занимает много времени (например, от 5 до 8 секунд). И у меня есть это в logcat, который повторяется много раз: (я покажу вам код после)
- 2020-03-03 21:25 : 22.165 31096-31096 / com.elfefe.clarity D / HwSplineOverScrollerExImpl: initSplineOverScrollerImpl: mScrollerVelocity равен 0, значение равно 0
- 2020-03-03 21: 25: 22.165 31096-31096 / com.elfefe.clarity I / FLTAG_FM: класс loadFeature: com.huawei.featurelayer.systemfeature.HwWidget.IHwSplineOverScrollerEx
- 2020-03-03 21: 25: 22.166 31096-31096 / com .elfefe.clarity I / FLTAG_SFM: getRequireClassLoader () su cc! className: com.huawei.featurelayer.systemfeature.HwWidget.IHwSplineOverScrollerEx
- 2020-03-03 21: 25: 22.166 31096-31096 / com.elfefe.clarity D / FeatureFactory: loadFeature ( ): com.huawei.featurelayer.systemfeature.HwWidget.IHwSplineOverScrollerEx
- 2020-03-03 21: 25: 22.166 31096-31096 / com.elfefe.clarity D / FeatureFactory: loadFeature ( ) new IHwSplineOverScrollerEx ()
- 2020-03-03 21: 25: 22.166 31096-31096 / com.elfefe.clarity D / HwSplineOverScrollerExImpl: initSplineOverScrollerImpl paras: android .widget. 1027 *, com.elfefe.clarity.controlleur. MainActivity@8a41969
- 2020-03-03 21: 25: 22.166 31096-31096 / com.elfefe.clarity D / HwSplineOverScrollerExImpl: initSplineOverScrollerImpl : mScrollerVelocity равен 0, значение равно 0
- 2020-03-03 21: 25: 22.191 31096-31130 / com.elfefe.clarity I / OpenGLRenderer: Davey! Продолжительность = 2071ms; Флаги = 0, IntendedVsync = 63784152698766, Vsync = 63786169365352 ** OldestInputEvent = 9223372036854775807, NewestInputEvent = 0, HandleInputStart = 63786177710569, AnimationStart = 63786177815256, PerformTraversalsStart = 63786178750673, DrawStart = 63786179533485, SyncQueued = 63786185737131, SyncStart = 63786186001714, IssueDrawCommandsStart = 63786186665777, SwapBuffers = 63786221115256, FrameCompleted = 63786224180881, DequeueBufferDuration = 428000, QueueBufferDuration = 290000
- 2020-03-03 21: 25: 22.192 31096-31096 / com.elfeI jank_removeInvalidNode список джанков равен нулю
И есть пользовательские представления:
RecyclerView
open class TimeRecyclerView(context: Context, attrs: AttributeSet?) : RecyclerView(context, attrs) {
val time = mutableListOf<String>()
var position = 0
var isTouchable = true
var isScrolling = false
init {
layoutManager = LinearLayoutManager(context)
adapter = TimeAdapter(context, time)
}
override fun onTouchEvent(e: MotionEvent?): Boolean {
super.onTouchEvent(e)
return isTouchable
}
fun onChange(action: () -> Unit = {}) {
val layoutManager = this.layoutManager as LinearLayoutManager
this.addOnScrollListener(object :
RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
if (newState == 0 && !isScrolling) {
isScrolling = true
position = layoutManager.findLastVisibleItemPosition()
recyclerView.scrollToPosition(position)
action()
isScrolling = false
}
}
})
}
}
Часы (минуты работают одинаково, но с 59, а не с 23)
class Hours(context: Context, attributeSet: AttributeSet?) : TimeRecyclerView(context, attributeSet) {
init {
for (i in 0..23) {
time.add(
if (i < 10) "0$i" else i.toString()
)
}
adapter?.notifyDataSetChanged()
}
}
ConstraintLayout
class Alarm(context: Context, attributeSet: AttributeSet): ConstraintLayout(context, attributeSet) {
var hours: Hours
private set
var minutes: Minutes
private set
init {
inflate(context, R.layout.alarm, this)
hours = recyclerview_hours
minutes = recyclerview_minutes
hours.onChange()
minutes.onChange()
}
fun disable() {
hours.isTouchable = false
minutes.isTouchable = false
}
}
Вопрос прост: почему просмотр занимает так много времени?
Заранее спасибо за ваши знания!