2013-08-02 1 views
0

복잡한 배경을 가진 사용자 정의 뷰를 만듭니다. 상단 뷰 - 비트 맵 드로어 블과 9- 패스 드로잉 가능 요소에서 두 가지 요소로 구성됩니다.안드로이드는 지정된 위치 대신 캔버스 상단에 9- 경로 드로어 블을 그립니다.

내 코드입니다 : 최고 당김 높이가 10 픽셀 인 경우 예를 들어

public class MyCustomFrame extends FrameLayout 
{ 
    Drawable main, top; 

    public RequestInfoBottomContainer(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 

     main = res.getDrawable(R.drawable.bg_main); 
     top = res.getDrawable(R.drawable.bg_top); 
    } 


    @Override 
    protected void onDraw(Canvas canvas) 
    { 
     int width = getMeasuredWidth(); 
     int height = canvas.getHeight(); 


     top.setBounds(0, 0, width, top.getIntrinsicHeight()); 
     main.setBounds(0, top.getIntrinsicHeight(), width, height); 

     top.draw(canvas); 
     main.draw(canvas); 

    } 
} 

, 폭 500 픽셀, 높이 200 픽셀이고 나는 200 주 당김 안드로이드 무에 경계 0, 10, 500, 설정 그것 0, 0, 500, 200 경계. 나는. 메인은 맨 위에 그립니다.

내가 뭘 잘못 했니?

+0

'top.getIntrinsicHeight()'가 0을 반환 할 수 있습니다. 확인할 수 있습니까? – Vikram

+0

항상 값> 0을 반환합니다. 제 경우 값은 10입니다. – Nik

답변

0

나는 작은 일을하지만, 좋지 않습니다.

Bitmap bmp = Bitmap.createBitmap(width, height - top.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
main.setBounds(0, 0, width, bmp.getHeight()); 
main.draw(new Canvas(bmp)); 
canvas.drawBitmap(bmp, 0, top.getIntrinsicHeight(), null); 
bmp.recycle(); 
관련 문제