2011-03-20 110 views
2

我正在嘗試創建一個ListView,我可以在ListView中的每個項目中繪製一些基本形狀。我發現了許多使用ListView中的Views/Layouts添加圖像等的例子,但我不確定如何使用Canvas或類似方法繪製每個圖像。此外,這些例子似乎都以略有不同的方式工作,所以我想知道最佳策略是什麼。在ListView項目中繪製

目前我只有一個Main類,它使用基本文本填充ListView。

Main.java

public class Main extends Activity { 

    private ListView listView; 
    String[] list = {"One","Two","Three"}; 

    public void onCreate(Bundle bundle) { 

     super.onCreate(bundle); 
     setContentView(R.layout.main); 

     listView = (ListView)findViewById(R.id.ListView1); 
     listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list)); 
    } 
} 

現在我收集我需要在這裏更改適配器位,並且還寫它可能延伸查看,這是我可以得出另一個類,然後將其添加爲一個ListView中的項?

感謝您的幫助提前。

回答

2

您需要將您的ListView繼承到自定義實現。

public class CustomListAdapter extends ArrayAdapter<CustomRowData> { 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     CustomRowData currentRow = getItem(position); 
     View customRowView = .... // such as CustomRowView below. 
     ... 
     ... 
     return customRowView; 
    } 
} 

您可以通過適當的View代碼替換...改變在ListView每一行的看法。

例如,您可以使用SurfaceView來繪製它。

class CustomRowView extends SurfaceView { 
    ... 
    ... 
    @Override 
    public void onDraw(Canvas canvas) { 
    // Use |canvas| to draw on.. 
    } 
} 

上面的代碼沒有經過測試,但希望能推動你走向正確的方向。確保你優化你的繪圖,如使用緩存時,預處理等。

+0

感謝您的回答。我試圖使用這種技術,但我不是那裏;當我運行它時,我正在收到一個Force Close。我認爲最簡單的方法是將我的完整代碼作爲新問題發佈,而不是完全編輯此問題。 – woodstock365 2011-03-21 19:28:52