Android 拖转改变视图高度
class DraggableBottomView( context: Context, attrs: AttributeSet? = null, ) :LinearLayout(context, attrs, 0) { private var gestureDetector: GestureDetectorCompat private var initialY = 0f private var initialX = 0f private var initialHeight = 0 private val minHeight: Int private val maxHeight: Int private val touchSlop: Int //触摸滑动距离 private var isDragging = false // 是否正在拖动 private var isUpOrDown = "up" // up向上 down 向下 init { minHeight = CommonUtil.dpToPx(context,200) maxHeight = CommonUtil.dpToPx(context,500) touchSlop = ViewConfiguration.get(context).scaledTouchSlop gestureDetector = GestureDetectorCompat(context, object : GestureDetector.SimpleOnGestureListener() { override fun onDown(e: MotionEvent): Boolean { initialY = e.rawY initialX = e.rawX initialHeight = height return true } }) } override fun onTouchEvent(event: MotionEvent): Boolean { gestureDetector.onTouchEvent(event) when (event.action) { MotionEvent.ACTION_MOVE -> { val dy = event.rawY - initialY val dx = event.rawX - initialX if (Math.abs(dy) > touchSlop && Math.abs(dy)>Math.abs(dx)){ isUpOrDown = if (dy < 0f) "up" else "down" isDragging = true }else{ isDragging = false } // 设置跟随手指滑动 val newHeight = (initialHeight - dy).toInt() val clampedHeight = newHeight.coerceIn(minHeight, maxHeight) val params = layoutParams as ViewGroup.LayoutParams params.height = clampedHeight layoutParams = params requestLayout() } MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { if (isDragging) { // 滑动松手后的逻辑 if (isUpOrDown == "up") { animateHeightChange(maxHeight) } else { // 固定到初始位置位置 animateHeightChange(minHeight) } isDragging = false } else { } } } return true } private fun animateHeightChange(targetHeight: Int) { val valueAnimator = ValueAnimator.ofInt(height, targetHeight) valueAnimator.duration = 200 // 动画持续时间,可根据需要调整 valueAnimator.addUpdateListener { animator -> val animatedValue = animator.animatedValue as Int val params = layoutParams as ViewGroup.LayoutParams params.height = animatedValue layoutParams = params requestLayout() } valueAnimator.start() } }
原文地址:https://blog.csdn.net/dongxingxxx/article/details/145262825
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!