Рисовать внутри элемента ListView - PullRequest
2 голосов
/ 21 марта 2011

Я пытаюсь создать ListView, где я могу нарисовать некоторые базовые фигуры для каждого элемента в ListView. Я нашел много примеров использования Views / Layouts в 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));
    }
}

Теперь я понял, что мне нужно изменить бит адаптера здесь, а также написать другой класс, который, возможно, расширяет View, к которому я могу рисовать, а затем добавить это как элемент в ListView?

Спасибо за вашу помощь заранее.

1 Ответ

2 голосов
/ 21 марта 2011

Вам потребуется создать подкласс 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..
  }
}

Приведенный выше код не проверен, но, надеюсь, приведет вас в правильном направлении.Убедитесь, что вы оптимизируете свой чертеж, например, используйте кэширование, когда доступно, предварительную обработку и т. Д.

...