【发布时间】:2015-05-03 16:33:08
【问题描述】:
我用新的 CardView 和 RecyclerView 创建了一个卡片列表,看起来像这样:
我尝试修改带有圆角的卡片,正如 Mariotti 在 this 帖子中所解释的那样。
问题:问题在于,正如您从屏幕截图中看到的那样,我只能在图像保持正方形时设置卡片的角。
在示例中,扩展Drawable 的自定义Drawable 类使用Canvas.drawRoundRect() 绘制圆角矩形,并使用Paint 和BitmapShader 用纹理而不是简单颜色填充圆角矩形,正如here所解释的那样。
在我的适配器中,我有:
@Override
public ContactViewHolder onCreateViewHolder(final ViewGroup viewGroup, int i) {
final View itemView = LayoutInflater
.from(viewGroup.getContext())
.inflate(R.layout.item_card_view, viewGroup, false);
CardView cardView = (CardView) itemView.findViewById(R.id.card_view);
ImageView imageView = (ImageView) itemView.findViewById(R.id.hImage);
Bitmap mBitmap = BitmapFactory.decodeResource(itemView.getResources(), R.drawable.background);
//Default
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
//Default
imageView.setBackgroundResource(R.drawable.background);
} else {
//RoundCorners
madapps.hellogridview.RoundCornersDrawable round = new madapps.hellogridview.RoundCornersDrawable(
mBitmap,
itemView.getResources().getDimension(R.dimen.cardview_default_radius)
, 5); //or your custom radius
cardView.setPreventCornerOverlap(false); //it is very important
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
imageView.setBackground(round);
else
imageView.setBackgroundDrawable(round);
}
//Set onClick listener
cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int tag = (Integer) v.findViewById(R.id.hTitle).getTag();
Toast.makeText(viewGroup.getContext(), "Clickable card no: "+tag, Toast.LENGTH_LONG).show();
}
});
return new ContactViewHolder(itemView);
}
我已经将R.dimen.cardview_default_radius 的值覆盖为8dp,但没有结果!有什么想法吗?
【问题讨论】:
-
我也尝试过这样做,但没有帮助。如果您删除图像或将其向下移动,您会注意到卡片有圆形边缘。所以问题出在正在使用的 ImageView 上。很难理解图像角落离开它的父母!。我没有亲自尝试过,但也许如果图像的顶角是圆形的,它可能会有所帮助。
-
我明白你的意思。舍入图像本身也是另一种方法。然而,自定义
Drawable类(此处:gist.github.com/gabrielemariotti/…)是为了以编程方式使图像的角变圆,此处也有说明:curious-creature.com/2012/12/11/… -
我也有同样的问题。你是如何解决这个问题的?
-
检查我的最后一个答案 ;)
标签: android-layout android-imageview android-cardview cardslib