gpt4 book ai didi

Android:ListView,圆角问题

转载 作者:太空狗 更新时间:2023-10-29 13:40:14 25 4
gpt4 key购买 nike

我有像下面这样实现的带有圆角的 ListView。

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/list_bg"
android:divider="#dbdbdb"
android:dividerHeight="1sp"
android:cacheColorHint="#00000000"
android:descendantFocusability="afterDescendants"
android:scrollbars="vertical">
</ListView>

其中 list_bg.xml 是:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffffff"/>
<corners android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp"
/>
</shape>

这给我圆角。问题是每个项目都是 RelativeLayout,左侧是 TextView,右侧是 ImageButton。两种 View 都有关于按下、聚焦和默认状态的自定义图形。像这样。

+------------------------------------+
| TextView | ImageButton |
+------------------------------------+

问题是自定义图形覆盖了 ListView 背景,因此第一个和最后一个项目的圆角。滚动时一切正常。

我已经编写了自定义适配器,并在 getView 方法中为项目设置了正确的 bg。

@Override
public View getView(int position, View view, ViewGroup parent) {
...
if(position == 0) {
mItemView.setBackgroundResource(R.drawable.cell_item_first_selector);
mImgBtn.setBackgroundResource(R.drawable.cell_btn_first_selector);
}
else if (position == mData.size() -1) {
mItemView.setBackgroundResource(R.drawable.cell_item_last_selector);
mImgBtn.setBackgroundResource(R.drawable.cell_btn_last_selector);
}
else {
mItemView.setBackgroundResource(R.drawable.cell_item_def_selector);
mImgBtn.setBackgroundResource(R.drawable.cell_btn_def_selector);
}
...
}

它有效,但我不确定这是不是好的解决方案。有没有其他方法可以在 Android View 中自动圆角,而不仅仅是通过设置背景?

最佳答案

public class ClippedListView extends ListView {

/**
* @param context
*/
public ClippedListView(Context context) {
super(context);
}

/**
* @param context
* @param attrs
*/
public ClippedListView(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void dispatchDraw(Canvas canvas) {
float radius = 10.0f;
Path clipPath = new Path();
RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight());
clipPath.addRoundRect(rect, radius, radius, Path.Direction.CW);
canvas.clipPath(clipPath);
super.dispatchDraw(canvas);
}
}

首先裁剪不起作用,然后使用

setLayerType(View.LAYER_TYPE_SOFTWARE, null)

在我的 clippedListView 上解决了这个问题。我的项目背景不会再弄乱我的角落了!

关于Android:ListView,圆角问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6647121/

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