2012-12-12 1 views
4

좋아요,이 말은 날 미워합니다. 내 응용 프로그램에서 계기를 그리기 위해 캔버스를 사용하고 있습니다. 또한 게이지를 가로 지르는 해쉬 마크와 가로 텍스트에 숫자를 그립니다. 이 모든 버전의 Android는 모든 버전에서 최대 4.2까지 작동합니다. 4.2에서는 한 문자 (중간 문자 인 것처럼 보임)를 텍스트로 그리기 만합니다. 예를 들어 12345를 읽는 텍스트가있는 경우 3을 쓰는 것입니다. 두 자리 숫자 인 경우 첫 번째 숫자 만 그립니다. 이 문제는 4.2 에뮬레이터와 4.2.1의 Nexus 4에서 볼 수 있습니다. 하드웨어 가속이 기본적으로 켜져 있고 일부 페인트 및 캔버스 기능에 문제가 있음을 모두 읽었습니다. drawText 호출에 대한 하드웨어 가속을 끄는 코드를 삽입했지만 도움이되지 않습니다. 나는 그와 너비와 높이가 완벽 유효 캔버스 통과DrawText는 Jelly Bean에서 문자열의 한 문자 만 드로잉합니다. 4.2

@SuppressLint("NewApi") 
private void drawTitle1(Canvas canvas) { 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
     setLayerType(View.LAYER_TYPE_SOFTWARE, titlePaint1); 

    canvas.drawText(title1, 0.5f, 0.72f, titlePaint1); 
} 

:

여기
titlePaint1 = new Paint(); 
titlePaint1.setColor(Color.WHITE); 
titlePaint1.setAntiAlias(true); 
titlePaint1.setTypeface(Typeface.DEFAULT_BOLD); 
titlePaint1.setTextAlign(Paint.Align.CENTER); 
titlePaint1.setTextSize(0.085f); 

텍스트를 그리기 위해 호출하는 방법입니다 :

여기 내 페인트 코드입니다. 그 캔버스에 그려진 다른 모든 것들은 잘 보이고 있으며, 게이지의 구성 요소를 그리기 전에 위의 것과 같은 세 가지 다른 함수 호출이 있습니다. drawText와 관련된 문제 일뿐입니다. 4.2의 변경과 관련이 있으며이 drawText 문제는 ​​하드웨어 가속화와 관련이 없다고 생각합니다. 필자는 Google에서 캔버스 문제에 대해 4.2에 관한 몇 가지 결과를 발견 할 수 있었지만 문제는 해결되지 않았습니다. 어떻게하면이 문제를 해결하고 텍스트가 올바르게 표시되는지 알 수 있습니까?

+0

페인트가 샘플 코드에서 일치하지 않습니다. 그게 문제일까요? – AedonEtLIRA

+0

CENTER 텍스트 정렬을 사용하고 있습니다. 즉, 클리핑 문제 일 가능성이 있습니다. 클립을 올바르게 설정 하시겠습니까? 소프트웨어와 하드웨어 모두에서 발생한다는 사실은 코드에 문제가 있음을 나타냅니다. 두 파이프 라인은 완전히 다른 구현을 사용합니다. –

+0

@AedonEtLIRA 코드 샘플에 일치하는 titlePaint가 없다는 것에 나쁘다. 나는 titlePaint3을 실험하고 있었지만 titlePaint1은 올바른 것이고 둘 다 코드에서 일치합니다. – ssuperz28

답변

6

"Seraphim 's host"에 감사의 말씀을 전합니다. 4.2.1에서이 문제를 겪고있는 다른 사람들에게는 텍스트에 대한 페인트에 setLinearText (true)를 포함시켜야합니다. 이 메소드는 더 이상 사용되지 않는 것으로 표시되지만 텍스트가 올바르게 표시되는 유일한 해결책입니다.

다음은 답변이있는 게시물입니다. https://stackoverflow.com/a/13971632/1017328.

+0

도와 드리겠습니다! 나는 커닝 문제에 아직도 직면 해있다. 내 다른 질문을 참조하십시오 : http://stackoverflow.com/questions/13974129/android-4-2-1-worng-character-kerning-spacing –

+0

많은 도움을 주셔서 감사합니다, 정말 도움이되었다! – Arkde