2017-09-27 6 views
0

LinearLayout을 확장 한 CustomView에 사용자 정의 배경을 그리려고합니다.캔버스에서 사용자 정의 배경 그리기 문제 (안드로이드)

int mPositionX = 0; 
int mPositionY = 0; 
final int viewWidth = getMeasuredWidth(); 
final int viewHeight = getMeasuredHeight(); 

mPath.moveTo(mPositionX, mPositionY); 
mPositionX = viewWidth; 
mPath.lineTo(mPositionX, mPositionY); 
mPositionY = viewHeight; 
mPath.lineTo(mPositionX, mPositionY); 

//draw bottom triangles 
for(int i = 0; mPositionX >= 0; i++){ 
    mPositionX -= HALF_BORDER_STEP; 
    mPositionY = i%2 == 0 ? mPositionY - BORDER_HEIGHT : mPositionY + BORDER_HEIGHT; 
    mPath.lineTo(mPositionX, mPositionY); 
} 

// move to left bottom corner 
mPositionX = 0; 
mPath.lineTo(mPositionX,mPositionY); 
mPath.close(); 

canvas.clipPath(mPath); 
canvas.drawPath(mPath, mCheckPaint); 
super.draw(canvas); 

나는이 문제가 :

은 여기 내의 onDraw() 메소드이다.

우선 배경을 설정하지 않으면 내 사용자 정의 배경이 표시되지 않으므로 내 배경에 안드로이드 : background = "@ color/transparent"를 작성했습니다.

두 번째 문제는 .addView(View view)을 통해 일부보기를 추가하면 내 배경이 사라집니다.

나는 invalidate()을 호출하려고했지만 아직 아무것도하지 못했습니다.

내가 뭘 잘못 했니?

답변

0

내 문제를 해결하려면 setWillNotDraw(false);을 추가해야합니다. 즉 내보기가 독자적으로 그리기를 의미합니다. Android Dev Docs.이 후 나는 더 많은 방법을 하나 더 그리워하지 않았다 : 내 onDraw(Canvas canvas);에 다시 그리기 직전에 mPath.reset(); 바로 그 것이다.