2011-12-27 5 views
0

LinearLayout에 사용자 정의 뷰를 추가 할 때 다른 크기의 캔버스를 표시하고 캔버스의 크기를 설정하려고하므로 캔버스의 비트 맵 크기를 동일하게 유지하고 싶습니다. 비트 맵 객체. 코드의캔버스 크기 설정 - Android

부 :

public class TESTActivity extends Activity {  

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     LinearLayout l = new LinearLayout(this); 
     l.setOrientation(1); 
     Button b1 = new Button(this); 
     Button b2 = new Button(this); 
     View mV = new MyView(this);   
     l.addView(b1); 
     l.addView(b2); 
     l.addView(mV);  
     setContentView(l); 

    } 


    public class MyView extends View { 


     public MyView(Context c) { 
      super(c); 
      mBitmap = Bitmap.createBitmap(480, 300, Bitmap.Config.ARGB_8888); 
      mCanvas = new Canvas(mBitmap); 
      ... 
     } 
     ... 
    } 
} 

답변

0

캔버스 클래스는 "그리는"전화를 보유하고 있습니다. Canvas(Bitmap bitmap) 그리기 위해 지정된 비트 맵을 사용하여 캔버스를 구성합니다. 캔버스는 그리기 개체의 크기를 사용합니다. 그래서 비트 맵의 ​​크기를 설정하여 캔버스의 크기를 설정할 수 있습니다.

+1

그러면 Canvas의 색상이 비트 맵과 다른 이유는보기 크기가 더 커지기 때문입니다. 크기를 테스트하기 위해 onSizeChanged를 재정의하고 너비 480 및 높이 536, 내 비트 맵 480x300에 대한 값을 제공합니다. 뭐가 잘못 되었 니? 감사 –

0

당신은 사용자 정의 높이 캔버스에 그릴 원하는 기본적 하여 활동 class.Because에 된 setContentView (android.view.View에서 yourView, android.view.Viewgroup.LayoutParam yourLayout) 전화를해야 폭 경우 setContentView (view view) 메서드는 전체 너비와 높이를 사용합니다. 따라서 원하는대로 두 개의 매개 변수로 오버로드 된 메서드를 사용해야합니다. 자세한 정보는 문서를 참조하십시오. 그리고 객체를 생성하기 위해 LayoutParams() 생성자만을 사용하지 마십시오. android.view.ViewGroup.LayoutParams과 같은 전체 경로를 작성하여 사용하십시오. Android SDK에는 같은 이름의 다른 클래스가 있기 때문에 LayoutParams 만 사용하는 경우 Eclipse에서 올바른 클래스를 찾지 못해 전체 경로를 사용합니다.

MyView customView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    customView = new MyView(getApplicationContext()); 
    android.view.ViewGroup.LayoutParams lp = new android.view.ViewGroup.LayoutParams(100,200);//100 is width and 200 is height 
    setContentView(customView, lp); 
    customView.setOnClickListener(this); 

}`