2011-07-11 13 views
2

丸みを帯びたコーナーを持つリストビューは、以下のように実装されています。Android:ListView、丸みを帯びたコーナーの問題

list_bg.xmlがある
<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> 

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

これは私に丸みを帯びた角を与えます。 問題は、各アイテムが左側にTextView、右側にImageButtonを持つRelativeLayoutであることです。両方のビューには、押された、塗りつぶされた、デフォルトの状態のカスタムグラフィックがあります。このようなもの。

+------------------------------------+ 
|  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ビューで自動的に角を丸める方法はありますか?

答えて

0

リストの項目にこの背景が必要な場合は、リストレイアウトではなく背景レイアウトを項目レイアウトに添付する必要があります。

+0

それは役に立ちません。まだ最初と最後のアイテムのグラフィックは丸みのあるコーナーを隠します。最初と最後のアイテムに異なるグラフィックスを設定するソリューションはありますか? – Adrian

+0

それはうまくいくはずです。あなたのアイテムのレイアウトのコードをいくつか投稿できますか? –

2
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); 
} 
} 

まずクリッピングは、問題を解決するために私clippedListViewに(ヌルView.LAYER_TYPE_SOFTWARE、)

setLayerType

を使用して、働いていませんでした。私のアイテムのバックグラウンドはもう私のコーナーを乱さない!

+0

鮮やかな溶液。私の日を救った。 SetLayerType(これはAPI 11が必要です)なしでこれがどのように達成できるか考えていますか? – Kenneth

関連する問題