代码之家  ›  专栏  ›  技术社区  ›  y.allam

KitKat上的StackOverflower错误,因为矢量可提取

  •  0
  • y.allam  · 技术社区  · 8 年前

    我有一个具有以下视图层次结构的自定义视图:

    [LinearLayout]
      [CardView]
        [LinearLayout]
          [RecyclerView]
    

    最后的每个项目 RecyclerView 包含 3矢量牵引 。当我在KitKat(api 19)上运行应用程序时 StackOverflowError 发生

    FATAL EXCEPTION: main
         Process: com.tsse.spain.myvodafone, PID: 3405
         java.lang.StackOverflowError
             at android.graphics.Matrix.mapVectors(Matrix.java:684)
             at android.support.graphics.drawable.VectorDrawableCompat$VPathRenderer.getMatrixScale(VectorDrawableCompat.java:1300)
             at android.support.graphics.drawable.VectorDrawableCompat$VPathRenderer.drawPath(VectorDrawableCompat.java:1207)
             at android.support.graphics.drawable.VectorDrawableCompat$VPathRenderer.drawGroupTree(VectorDrawableCompat.java:1184)
             at android.support.graphics.drawable.VectorDrawableCompat$VPathRenderer.draw(VectorDrawableCompat.java:1193)
             at android.support.graphics.drawable.VectorDrawableCompat$VectorDrawableCompatState.updateCachedBitmap(VectorDrawableCompat.java:1023)
             at android.support.graphics.drawable.VectorDrawableCompat.draw(VectorDrawableCompat.java:366)
             at android.view.View.draw(View.java:14450)
             at android.view.View.getDisplayList(View.java:13362)
             at android.view.View.getDisplayList(View.java:13404)
             at android.view.View.draw(View.java:14182)
             at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
             at android.view.View.draw(View.java:14468)
             at android.view.View.getDisplayList(View.java:13362)
             at android.view.View.getDisplayList(View.java:13404)
             at android.view.View.draw(View.java:14182)
             at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
             at android.view.View.getDisplayList(View.java:13357)
             at android.view.View.getDisplayList(View.java:13404)
             at android.view.View.draw(View.java:14182)
             at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
             at android.view.View.getDisplayList(View.java:13357)
             at android.view.View.getDisplayList(View.java:13404)
             at android.view.View.draw(View.java:14182)
             at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
             at android.support.v7.widget.RecyclerView.drawChild(RecyclerView.java:4477)
             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
             at android.view.View.draw(View.java:14468)
             at android.support.v7.widget.RecyclerView.draw(RecyclerView.java:3869)
             at android.view.View.getDisplayList(View.java:13362)
             at android.view.View.getDisplayList(View.java:13404)
             at android.view.View.draw(View.java:14182)
             at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
             at android.view.View.getDisplayList(View.java:13357)
             at android.view.View.getDisplayList(View.java:13404)
             at android.view.View.draw(View.java:14182)
             at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
             at android.view.View.draw(View.java:14468)
             at android.widget.FrameLayout.draw(FrameLayout.java:472)
             at android.view.View.getDisplayList(View.java:13362)
             at android.view.View.getDisplayList(View.java:13404)
             at android.view.View.draw(View.java:14182)
             at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
             at android.view.View.draw(View.java:14468)
             at android.view.View.getDisplayList(View.java:13362)
             at android.view.View.getDisplayList(View.java:13404)
             at android.view.View.draw(View.java:14182)
             at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
             at android.view.View.getDisplayList(View.java:13357)
             at android.view.View.getDisplayList(View.java:13404)
             at android.view.View.draw(View.java:14182)
             at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
             at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
             at android.view.View.getDisplayList(View.java:13357)
             at android.view.View.getDisplayList(View.java:13404)
             at android.view.View.draw(View.java:14182)
             at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
             at android.support.v7.widget.RecyclerView.drawChild(RecyclerView.java:4477)
            at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940
    

    我正在使用 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); Application 类别的 onCreate() vectorDrawables.useSupportLibrary = true 在里面 build.gradle

    当我使用普通 巴布亚新几内亚 drawables错误不会发生。

    我做错了什么?

    2 回复  |  直到 8 年前
        1
  •  0
  •   Santanu Sur    8 年前

    在里面 onBindViewHolder 创建您的 矢量可绘制 以编程方式将其设置为您的视图,如下所示:-

       Drawable your_vector_drawable = VectorDrawableCompat.create(context.getResources(), R.drawable.vectorDrawable, null);
    

    现在将此可绘制视图设置为 onBindViewHolder 。。。

      yourView.setBackground(your_vector_drawable);
    

    这将有望解决:)

    这是一个较低的api问题。。。

        2
  •  0
  •   y.allam    8 年前

    我通过将向量drawable转换为 Bitmap 首先,然后使用 ImageView.setImageBitmap(Bitmap) 。虽然性能较差,但可以完成工作