在ListView项目中绘制

时间:2011-03-20 22:37:25

标签: java android listview layout adapter

我正在尝试创建一个ListView,我可以在ListView中的每个项目中绘制一些基本形状。我发现很多使用ListView中的视图/布局来添加图像等的例子,但我不确定如何使用Canvas或类似方法绘制每个图像。此外,这些示例似乎都以稍微不同的方式工作,所以我想知道最佳策略是什么。

目前我只有一个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));
    }
}

现在我收集我需要在这里更改Adapter位,还要编写另一个可能扩展View的类,我可以绘制它,然后将它作为ListView中的项添加?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分: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;
  }
}

您可以使用相应的ListView代码替换...来更改View中每行的视图。

例如,您可以使用SurfaceView来绘制它。

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

上述代码未经过测试,但希望能够引导您走向正确的方向。确保优化绘图,例如在可用时使用缓存,预处理等。