API< 21

时间:2015-05-11 15:28:52

标签: android bitmap android-recyclerview

当我在KitKat中以编程方式setBackground()尝试CardView时遇到问题。当应用程序在Android L上运行时,我的代码中没有问题:

Drawable drawable = new BitmapDrawable(appContext.getResources(), bitmap);
if (cardView != null) {                
    cardView.setBackground(drawable);
}

但是当它在比Android L更早的API中运行时,我收到此错误:android.graphics.drawable.BitmapDrawable cannot be cast to android.support.v7.widget.RoundRectDrawableWithShadow.

我发现这是已知的问题,并且您可以将颜色设置为卡的背景,但有没有任何解决方案可以用编程方式为背景设置位图?您是否知道如何从我的RoundRectDrawableWithShadow创建BitmapDrawable

2 个答案:

答案 0 :(得分:2)

  

你知道如何从我的BitmapDrawable创建RoundRectDrawableWithShadow吗?

除非您希望重写自己的CardView实施,否则不要这样做。

RoundRectDrawableWithShadow是一个包私有类,用于获取由app:cardBackgroundColorsetCardBackgroundColro(int)提供的颜色并将其包装在带阴影的圆角矩形中以生成一个可绘制的。

由于在API 21中引入了提升,因此阴影被绘制为先前平台上可绘制的CardView背景的一部分,因此您无法通过setBackground(*)

  

是否有任何解决方案可以用编程方式为背景设置位图?

您可以在卡片中放置View*Layout等,并在其上设置圆形可绘制背景。但它在性能方面不会有效。

https://developer.android.com/reference/android/support/v4/graphics/drawable/RoundedBitmapDrawable.html

答案 1 :(得分:1)

所以是的,如果你绝对需要别的东西而不是纯色,那就去View.setBackground