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

前端之家收集整理的这篇文章主要介绍了android – 我们什么时候应该使用LAYER_TYPE_HARDWARE前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
阅读 http://developer.android.com/guide/topics/graphics/hardware-accel.html后,我对3种不同类型的分层技术的理解是(假设设备有GPU)

> LAYER_TYPE_SOFTWARE – 绘图由软件的屏幕外位图存储器上的软件执行.然后,软件的屏幕外位图将传输到GPU. GPU在屏幕上渲染位图.
> LAYER_TYPE_NONE – GPU将直接在屏幕上绘制.
> LAYER_TYPE_HARDWARE – GPU在GPU的屏幕外位图内存上执行绘制. GPU的屏幕外位图将由GPU渲染到屏幕.

何时使用LAYER_TYPE_SOFTWARE

我理解某些绘制操作不像GPU那样支持setShadowLayer.因此,我们需要切换到LAYER_TYPE_SOFTWARE,以便绘制将由软件执行.

但是,由于软件的屏幕外位图内存转移到GPU操作,因此事情可能会变慢.

何时使用LAYER_TYPE_NONE

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

何时使用LAYER_TYPE_HARDWARE

我不知道何时使用这种技术.当我们应该应用LAYER_TYPE_HARDWARE技术时,我们非常感谢任何一个例子.

p / s另外,我对LAYER_TYPE _…的理解可能看似错误.如果你发现任何错误,请纠正我.谢谢.

解决方法

何时使用LAYER_TYPE_HARDWARE

当我想绘制一个剪切父视图的文本(允许你透视它)时,我使用:

  1. setLayerType(View.LAYER_TYPE_HARDWARE,null)

例如,在我的自定义视图中:

  1. init {
  2. setLayerType(View.LAYER_TYPE_HARDWARE,null)
  3. }
  4.  
  5. private val textPaint = TextPaint(ANTI_ALIAS_FLAG).apply {
  6. textSize = size
  7. xfermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR)
  8. }
  9.  
  10. override fun onMeasure(widthMeasureSpec: Int,heightMeasureSpec: Int) {
  11. createTextLayout(MeasureSpec.getSize(widthMeasureSpec))
  12. setMeasuredDimension(widthMeasureSpec,heightMeasureSpec)
  13. }
  14.  
  15. private fun createTextLayout(textWidth: Int) {
  16. textLayout = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  17. StaticLayout.Builder
  18. .obtain(text,text.length,textPaint,textWidth)
  19. .setAlignment(Layout.Alignment.ALIGN_CENTER)
  20. .build()
  21. } else {
  22. StaticLayout(text,textWidth,Layout.Alignment.ALIGN_CENTER,1f,0f,true)
  23. }
  24. }
  25.  
  26. ...
  27.  
  28. override fun onDraw(canvas: Canvas?) {
  29. canvas?.drawCircle(width / 2f,height / 2f,width / 2f,circlePaint)
  30.  
  31. canvas?.withTranslation(
  32. x = width / 2f - textLayout.width / 2f,y = height / 2f - textLayout.height / 2f
  33. ) {
  34. textLayout.draw(canvas)
  35. }
  36. }

结果:

并且没有设置LAYER_TYPE_HARDWARE:

猜你在找的Android相关文章