2012-02-29 10 views
27

Mam konfigurację kodu w rozszerzonym widoku, który wykonuje niektóre rysunki, które są łatwo skalowane (podobne do wektorowych). (Moja skala została ustawiona jako 0-1.0)Android Canvas.drawTextOnPath nie wygląda poprawnie, gdy farba jest ustawiona na obrys

Zauważyłem, że gdy ustawiam wypełnienie farbą na WYPEŁNIĆ, tekst narysowany na ścieżce wygląda prawidłowo, ale gdy ustawiam wypełnienie do obrysu (chcę tylko obrysu tekst) obraz wygląda tak, jak na niektórych tripach LSD. Oto mój przykładowy kod:

Paint yellowPaint = Paints.getFillTextPaint(0.01f, 0xFFffea3e, 0.065f); 
    canvas.drawTextOnPath(mContext.getString(R.string.building_a_partnership), 
      Paths.getRoundedTextPath(mOuterCircleRectF, 280f, 350f), 
      0, -0.025f, yellowPaint); 

public static Paint getFillTextPaint(float f, int color, float textSize) { 
     Paint textPaint = new Paint(); 
     textPaint.setFlags(Paint.ANTI_ALIAS_FLAG); 
     textPaint.setStyle(Paint.Style.FILL); 
     textPaint.setColor(color); 
     textPaint.setTextSize(textSize); 
     textPaint.setStrokeWidth(f); 
     textPaint.setShadowLayer(0.002f, 0.0f, 0.0f, 0xFF000000); 
     textPaint.setTypeface(Typeface.SANS_SERIF); 
     return textPaint; 
    } 

Jeśli zmienię Paint.Style z FILL na STROKE, otrzymam poniższe obrazy. Użyłem canvas.drawText() i działa dobrze pokazując głaskane litery. Jest to tylko wtedy, gdy jest zastosowane do Ścieżki, kiedy wydaje się, że wszystko staje się dziwne.

Fill Image

Stroke Image

+0

'drawTextOnPath' może nie być obsługiwaną operacją canvas z włączonym akceleracją sprzętową. Zobacz http://android-developers.blogspot.com/2011/03/android-30-hardware-acceleration.html –

+0

Dzięki Romanowi, sprawdzi to. – Chrispix

+0

Próbowałem tego wystąpienia instance.setLayerType (View.LAYER_TYPE_SOFTWARE, null); zrobił drawTextOnPath, a następnie instancja.setLayerType (View.LAYER_TYPE_HARDWARE, null); - Czy to samo. – Chrispix

Odpowiedz

0

Podobno jest to spowodowane faktem, że mój współczynnik skali 0-1 .. Wydaje się, że to błąd w/w jaki sposób renderowania obrysu o rozmiarze < 1.0 jest leczony. Sugerowanym rozwiązaniem jest użycie skali 0-100 ..