2011-03-20 65 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