2013-10-16 3 views
0

TextView tv이 있는데, 일부 텍스트를 씁니다. 그런 다음 TextView에서 비트 맵을 추출하고이 비트 맵을 캔버스에 그립니다. TextView의 텍스트를 tv.setGravity (Gravity.CENTER)를 사용하여 세로 및 가로로 가운데에 맞 춥니 다. 그러나 텍스트는 수평으로 만 가운데에 맞춰집니다. 다음은 코드가 텍스트 뷰를 생성하고 모든 매개 변수 설정입니다 : 여기TextView Gravity.CENTER가 수직으로 센터링하지 않습니다.

tv.layout(0, 0, displayWidth, displayHeight); 
tv.setTextSize(60); 
tv.setTextColor(Color.WHITE); 
tv.setBackgroundColor(Color.GREEN); 
tv.setGravity(Gravity.CENTER); 
tv.setText(text); 
tv.setDrawingCacheEnabled(true); 
textBmp = tv.getDrawingCache().copy(Bitmap.Config.ARGB_8888, true); 
tv.setDrawingCacheEnabled(false); 

을 그리고 내 캔버스에 그립니다 어떻게 내가 그렇게 텍스트는 것을 어떻게해야합니까 무엇

protected void onDraw(Canvas canvas) { 

     canvas.drawBitmap(textBmp, 0, 0, null); 

    } 
} 

세로로 가운데에 위치한다. enter image description here

답변

0

당신은 다음과 같은 라인이 문제가 될 수있다 :

public void layout (int l, int t, int r, int b) 

Parameters: 
l : Left position, relative to parent 
t : Top position, relative to parent 
r : Right position, relative to parent 
b : Bottom position, relative to parent 

그래서, 당신은 가입일 거리로 당신의 TextView을 요구하고있다 :

tv.layout(0, 0, displayWidth, displayHeight); 

layout 기능에 대한 문서는 다음을 말한다 상위의 왼쪽과 왼쪽.

+0

불행히도 그게 아닙니다. 그냥 0보다 큰 값으로 시도했지만 여전히 동일합니다. 이 줄에서는 TextView가 얼마나 큰지를 정의하고 있습니다.이 경우 TextView는 부모만큼 큽니다. – TheBaj

+0

좋습니다. 이것이 당신에게 무엇을 주는가? 'tv.layout (displayWidth/4, displayHeight/4, displayWidth/4, displayHeight/4);'? –

+0

네 개의 값을 모두 동일하게 만들면 NullPointerException이 발생합니다. 위쪽 및 왼쪽 값을 아래쪽 및 오른쪽 값보다 작게 만들기 위해 조금 변경했습니다. 여전히 같은 결과입니다. 그것은 단지 수평 중심에있게됩니다. – TheBaj