2011-03-20 8 views
2

ListView에서 각 항목에 몇 가지 기본 도형을 그릴 수있는 ListView를 만들려고합니다. ListView 내에서 뷰/레이아웃을 사용하여 이미지 등을 추가하는 많은 예제를 발견했지만 Canvas 등을 사용하여 각 뷰를 그리는 방법을 잘 모르고 있습니다. 또한이 예제들은 모두 약간 다른 방식으로 작동하는 것처럼 보이므로 최고의 전략이 무엇인지 궁금합니다.Draw inside ListView item

현재 ListView에 기본 텍스트를 채우는 Main 클래스가 있습니다.

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