일반적인 리스트 뷰와 비슷한 구조입니다.

 

[다수의 뷰] ----AddView()---> LinearLayout ---AddView()---> Scrollview

 

의 구조로 해서 리스트 뷰처럼 구현을 하려고 하는데요,

 

단지, View에 Canvas를 이용하여 그림을 그리고 LinearLayout 에 추가하고 싶어서 OnDraw() 부분을

 

오버라이딩했습니다.

 

아래는 XML에서 정의한 LinearLayout을 가져와서 뷰를 만들고 테스트를 위해서 LinearLayout 에  40개쯤 넣는 소스입니다.

       LinearLayout lv = (LinearLayout)findViewById( R.id.calendar_lLayout03 ) ;
       for(int i = 0 ; i < 40 ; i++){
       Days_View TV = new Days_View(getApplicationContext(), i , 480);
       TV.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
       lv.addView(TV);
      }

아래가 제가 정의한 View의 소스구요.

  
 public class Days_View extends View{
  
  private Paint paint;
  private int time;
  private float left;
  private float top;
  private float width;
  
  public Days_View(Context context, int tim, float wid) {
   super(context);
   // TODO Auto-generated constructor stub
   paint = new Paint();
   time = tim;
   left = (float)10.0;
   top = (float)30.0;
   width = wid;
  }
  
  @Override
  protected void onDraw(Canvas canvas) {
   // draw lable
   paint.setColor(Color.WHITE);
   paint.setTextSize(20);
   canvas.drawText(String.valueOf(time+1), left, top , paint);
   
   // Line
   canvas.drawLine(50,10,width,10, paint); // define.
  }
 }

문제는 View 내의 OnDraw가 호출되지 않는다는데에 있습니다. 혹시나 해서 뷰를 new로 생성하고

 

Invalidate() 해보았으나 소용이 없네요.

 

아마도 SetContentView()와 같은 함수로 호출해주지 않으니 그런 것 같은데....

 

하고자하는 것은 뷰에 선을 긋고 글짜를 조금 쓰면 됩니다.

 

다른 방향으로 돌려서 이게 가능할까요?