android view 扩展方法

import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams
import android.view.ViewTreeObserver
import androidx.core.view.marginBottom
import androidx.core.view.marginLeft
import androidx.core.view.marginRight
import androidx.core.view.marginTop

/**

  • 绘制之前调用
  • 返回值onPreDraw:是否继续绘制,修改宽高的等需要返回false
  • ViewTreeObserver.OnPreDrawListener 的返回值是一个布尔值。
  • 如果返回 true,则表示绘制事件会继续进行;
  • 如果返回 false,则表示绘制事件会被取消,视图树将不会绘制。
    *通过返回 false,你可以在视图树绘制之前进行一些操作,例如修改视图的属性或者执行一些动画效果。
  • 如果你需要在绘制之前做一些准备工作或者对绘制进行干预,可以使用 ViewTreeObserver.OnPreDrawListener 来实现。
    */
    inline fun View.onPreDrawListener(crossinline onPreDraw: ((View) -> Boolean)) {
    val mPreDraw = object : ViewTreeObserver.OnPreDrawListener {
    override fun onPreDraw(): Boolean {
    viewTreeObserver.removeOnPreDrawListener(this)
    return onPreDraw.invoke(this@onPreDrawListener)
    }
    }
    viewTreeObserver.addOnPreDrawListener(mPreDraw)
    }

inline fun View.onGlobalLayoutListener(crossinline doGlobalLayout: ((View) -> Unit)) {
val mGlobalLayout = object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
viewTreeObserver.removeOnGlobalLayoutListener(this)
doGlobalLayout.invoke(this@onGlobalLayoutListener)
}
}
viewTreeObserver.addOnGlobalLayoutListener(mGlobalLayout)
}

/**

  • view 设置margin
    */
    inline fun View.setMargins(left: Int=marginLeft, top: Int=marginTop, right: Int=marginRight, bottom: Int=marginBottom): View {
    val tmp = layoutParams
    if (tmp is MarginLayoutParams) {
    tmp.setMargins(left, top, right, bottom)
    }
    return this
    }

/**

  • view 设置margin
    */
    inline fun View.removeParent() = getParentView()?.removeView(this)

/**

  • view 设置margin
    */
    inline fun View?.getParentView(): ViewGroup? = (this?.parent as? ViewGroup)

fun View.androidContent(): View =rootView.findViewById(android.R.id.content)

//val View.parentView: ViewGroup? get()= (this?.parent as? ViewGroup)

posted @ 2024-06-05 11:33  烟花易冷心易碎  阅读(6)  评论(0编辑  收藏  举报