gpt4 book ai didi

android - 我们什么时候应该使用 LAYER_TYPE_HARDWARE

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:10 25 4
gpt4 key购买 nike

阅读 http://developer.android.com/guide/topics/graphics/hardware-accel.html 后,我对 3 种不同类型的分层技术的理解是(假设设备有 GPU)

  • LAYER_TYPE_SOFTWARE - 绘图 由软件在屏幕外位图内存上执行。软件的离屏位图随后将传输到 GPU。 GPU 渲染屏幕上的位图。
  • LAYER_TYPE_NONE - GPU 将直接在屏幕上绘制
  • LAYER_TYPE_HARDWARE - Draw 由 GPU 在 GPU 的离屏位图内存上执行。 GPU 的离屏位图随后将由 GPU 渲染到屏幕。

何时使用 LAYER_TYPE_SOFTWARE

我的理解是某些 draw 操作不受 GPU 支持,例如 setShadowLayer。因此,我们需要切换到 LAYER_TYPE_SOFTWARE,以便绘制 由软件执行。

但是,由于有软件的屏幕外位图内存转移到 GPU 操作,所以事情可能会显得更慢。

何时使用 LAYER_TYPE_NONE

我认为这是大多数设备的默认设置。所以,我认为我们应该在大多数时候使用这种技术。

何时使用 LAYER_TYPE_HARDWARE

我不知道什么时候使用这种技术。我们将不胜感激关于何时应用 LAYER_TYPE_HARDWARE 技术的任何示例。

p/s 另外,我对LAYER_TYPE_... 的理解可能有误。如果您发现任何错误,请指正我。谢谢。

最佳答案

何时使用 LAYER_TYPE_HARDWARE

当我想绘制一个剪切父 View 的文本(让你看透它)时,我使用:

setLayerType(View.LAYER_TYPE_HARDWARE, null)

例如在我的自定义 View 中:

init {
setLayerType(View.LAYER_TYPE_HARDWARE, null)
}

private val textPaint = TextPaint(ANTI_ALIAS_FLAG).apply {
textSize = size
xfermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR)
}

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
createTextLayout(MeasureSpec.getSize(widthMeasureSpec))
setMeasuredDimension(widthMeasureSpec, heightMeasureSpec)
}

private fun createTextLayout(textWidth: Int) {
textLayout = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
StaticLayout.Builder
.obtain(text, 0, text.length, textPaint, textWidth)
.setAlignment(Layout.Alignment.ALIGN_CENTER)
.build()
} else {
StaticLayout(text, textPaint, textWidth, Layout.Alignment.ALIGN_CENTER, 1f, 0f, true)
}
}

...

override fun onDraw(canvas: Canvas?) {
canvas?.drawCircle(width / 2f, height / 2f, width / 2f, circlePaint)

canvas?.withTranslation(
x = width / 2f - textLayout.width / 2f,
y = height / 2f - textLayout.height / 2f
) {
textLayout.draw(canvas)
}
}

结果:

enter image description here

并且不设置 LAYER_TYPE_HARDWARE:

enter image description here

关于android - 我们什么时候应该使用 LAYER_TYPE_HARDWARE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27150353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com