Android: ListView, problema com cantos arredondados

Tenho o ListView com cantos arredondados implementados como abaix

<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>

onde 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>

Isso me dá cantos arredondados. O problema é que cada item é RelativeLayout com o TextView no lado esquerdo e o ImageButton no lado direito. Ambas as visualizações têm gráficos personalizados nos estados pressionado, falsificado e padrão. Algo assim

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

O problema é que os gráficos personalizados cobrem o fundo do ListView e, portanto, os cantos arredondados no primeiro e no último item. Está tudo bem ao rolar.

screvi o adaptador personalizado e, no método getView, defino a BG adequada para os iten

@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);
    }
    ... 
}

Funciona, mas não tenho certeza de que seja uma boa solução. Existe outra maneira de arredondar automaticamente os cantos no Android Views, não apenas definindo o plano de fundo?

questionAnswers(2)

yourAnswerToTheQuestion