2016-03-06 2 views
1

Je veux implémenter la palette de couleurs dans mon application. C'est la principale méthode onDraw.PorterDuff.Mode.MULTIPLY à l'intérieur ComposeShader ne fonctionne pas correctement

@Override 
protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     int h = canvas.getHeight(); 
     int w = canvas.getWidth(); 
     if (paint == null) { 
      paint = new Paint(); 
      luar = new LinearGradient(0.f, 0.f, 0.f, h, 0xffffffff, 0xff000000, TileMode.CLAMP); 
     } 
     int rgb = Color.HSVToColor(color); 
     Shader dalam = new LinearGradient(0.f, 0.f, w, 0.f, 0xffffffff, rgb, TileMode.CLAMP); 
     ComposeShader shader = new ComposeShader(luar, dalam, PorterDuff.Mode.MULTIPLY); 
     paint.setShader(shader); 
     canvas.drawRect(0.f, 0.f, w, h, paint); 
    } 

Mais, ComposeShader shader semble ne pas fonctionner.

C'est,

ComposeShader shader = new ComposeShader(dalam, luar, PorterDuff.Mode.MULTIPLY); 

montre que gradient vertical. Et si je change les paramètres:

ComposeShader shader = new ComposeShader(luar, dalam, PorterDuff.Mode.MULTIPLY); 

il montre le gradient horizontal. Pas de multiplication! Pourquoi?

+0

voir http://pastebin.com/y9sAMNAP – pskink

+0

@pskink, ce http://stackoverflow.com/q/15878769/1979882 – Vyacheslav

+0

@pskink, votre lien n'ont pas aidé – Vyacheslav

Répondre

0

J'ai le même problème. Mais maintenant l'a effacé. Insérez android:layerType="software" en tant qu'attribut de cette vue dans la ressource XML.