2013-03-11 18 views
6

Tworzę niestandardowy program do rysowania (rozciąga się on od Drawable) i próbuję umieścić na nim efekt cienia.Warstwa cienia działa z emulatorem, ale nie na rzeczywistym urządzeniu.

Oto część mojego kodu:

public void draw(Canvas canvas) { 
    Path path = new Path(); 
    path.moveTo(0, 0); 
    path.lineTo(0, Y/2); 
    path.lineTo(X/2, Y); 
    path.lineTo(X, Y/2); 
    path.lineTo(X, 0); 
    path.lineTo(0, 0); 
    Paint paint = new Paint(); 
    paint.setColor(context.getResources().getColor(R.color.red_dark)); 
    paint.setStyle(Style.FILL_AND_STROKE); 
    paint.setStrokeWidth(2f); 
    paint.setShadowLayer(1, 0, 10f, context.getResources().getColor(R.color.black)); 
    canvas.drawPath(path, paint); 
} 

Nie wiem dlaczego, ale to położyć się cieniem w tym samym kolorze, dwukrotnym sprawdził wszystko i nie widzę, gdzie jest problem. Testuję to na nexusie galaktyki. Ale na emulatorze działa dobrze.

+0

To działa dobrze na kopalni Samsung Note, ale rozszerzam widok, którego nie można przeciągnąć. Czy próbowałeś tego na większej liczbie urządzeń? – Lumis

Odpowiedz

10

Nie jestem pewien, ale może to być spowodowane akceleracją sprzętową. setShadowLayer nie działają, jeśli widok jest przyspieszony. Spróbuj wyłączyć przyspieszenie dla całej aplikacji i sprawdź. Read this.

Operations nieobsługiwany rysowania

setShadowLayer(): pracuje z tekstem tylko

użyć typu warstwa oprogramowania, aby wymusić aby być renderowane w oprogramowaniu. Jeśli widok, który jest przyspieszany sprzętowo (na przykład, jeśli cała twoja aplikacja jest akselowana sprzętowo), ma problemy z renderowaniem, jest to prosty sposób obejścia ograniczeń potoku renderowania sprzętu.

Zastosowanie setLayerType ustawić typ warstwy dla poszczególnych widoków lub turn off acceleration in your manifest dla całej aplikacji.

+4

To rzeczywiście z powodu przyspieszenia sprzętowego. Cienie są obecnie obsługiwane tylko w tekście. Jeśli potrzebujesz cieni na inne kształty, powinieneś użyć warstwy oprogramowania w swoim widoku. –

+0

Ho, i jak mogę to zrobić? Ponieważ nie jestem takim graficznym programistą. – Tsunaze

+0

zaktualizowana odpowiedź. – Leonidos

Powiązane problemy