1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

RadialGradient auf Milestone - keine Wirkung?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Compufreak, 27.02.2010.

  1. Compufreak, 27.02.2010 #1
    Compufreak

    Compufreak Threadstarter Android-Experte

    Beiträge:
    464
    Erhaltene Danke:
    59
    Registriert seit:
    11.07.2009
    Phone:
    Motorola Milestone
    Halli Hallo,

    ich habe es nun endlich doch mal geschafft, mich der Androidprogrammierung zuzuwenden und bin kurz davor mein Buch (Professional Android Application Development) geschafft zu haben, um genau zu sein bin ich gerade dabei das letzte Beispiel nachzuprogrammieren... Dabei geht es vor allem um optische Feilereien an einem Kompass, dazu wird auch ein RadialGradient verwendet, das seltsame bei diesem ist, dass er auf dem Galaxy (Android 1.5) mit den gleichen Zeilen Code zu funktionieren scheint, auf dem Milestone (Android 2.0.1) allerdings nicht. Auch Google konnte mir nichts zu dem Problem sagen.


    [​IMG]

    Hier der Code dazu :
    Code:
    // Initialisierung :
            borderGradientColors=new int[4];
            borderGradientPositions=new float[4];
            borderGradientColors[3]=myResources.getColor(R.color.outer_border);
            borderGradientColors[2]=myResources.getColor(R.color.inner_border_one);
            borderGradientColors[1]=myResources.getColor(R.color.inner_border_two);
            borderGradientColors[0]=myResources.getColor(R.color.inner_border);
            
            borderGradientPositions[3]=0.0f;
            borderGradientPositions[2]=1- 0.03f;
            borderGradientPositions[1]=1- 0.06f;
            borderGradientPositions[0]=1.0f;
    
    
    // in der onDraw-Methode :
    
    RadialGradient borderGradient=new RadialGradient(px,py,radius,
                    borderGradientColors,borderGradientPositions,
                    TileMode.CLAMP);
            Paint pgb=new Paint();
            
            pgb.setShader(borderGradient);
    canvas.drawOval(boundingBox,pgb);
    
    Was meint ihr - könnte es sein, dass das irgendwie am Code liegt (Vlt. muss man bei Android 2 explizit irgendeinen Grafikmodus aktivieren?) oder ist das ein Fehler/eine Änderung von Android seit 2.0 (siehe edits)?



    /edit : Auch im Emulator sieht es so aus, dass es bei Android 2.0.1 nicht funktioniert, bei 1.5 schon... Teste mal noch andere Versionen (wenn die Emulatoren schneller booten würden!)

    /edit²:
    Funktioniert mit Android 1.5[HVGA getestet] und 1.6[sowohl WVGA als auch HVGA),
    nicht aber mit Android 2.0[HVGA],Android2.0.1[WVGA], Android 2.1[WVGA]

    Nicht aufgezählte Auflösungen habe ich nicht getestet, aber scheint ja an der Android-Version und nicht an der Auflösung zu liegen.


    /edit³ : Kann mal bitte ein Mod den Titel vom Thread auf "RadialGradient teilweise keine Wirkung ab Android 2.0?" o.ä. ändern?

    /edit^4: Hmm seltsam, der folgende Gradient geht wieder auf allen Androiden? Auch wenn ich den einzigen offensichtlichen Unterschied zwischen den 2 Gradienten neben der Arraygröße und dem Zeitpunkt, wann sie gezeichnet werden ausbügele und die Farben beim nicht funktionierenden Radienten nicht aus den Ressourcen lade und verschiedene Transparenzen benutze, bleibt der Effekt der selbe - der Kreis kriegt durchgehend die Farbe der ersten im Farbarray angegebenen Farbe ab Android 2.0...

    Code:
    //Initialisierung...
            int glasscolor=245;
            glassGradientColors[4]=Color.argb(65, glasscolor, glasscolor, glasscolor);
            glassGradientColors[3]=Color.argb(100, glasscolor, glasscolor, 0);
            glassGradientColors[2]=Color.argb(50, glasscolor, 0, glasscolor);
            glassGradientColors[1]=Color.argb(0, 0, glasscolor, glasscolor);
            glassGradientColors[0]=Color.argb(0, glasscolor, glasscolor, glasscolor);
            
            glassGradientPositions[4]=1-0.0f;
            glassGradientPositions[3]=1-0.06f;
            glassGradientPositions[2]=1-0.10f;
            glassGradientPositions[1]=1-0.20f;
            glassGradientPositions[0]=1-1.0f;
    
    
    
    //onDraw
            RadialGradient glassShader=new RadialGradient(px,py,(int)innerRadius,
                    glassGradientColors,glassGradientPositions,TileMode.CLAMP);
            Paint glassPaint=new Paint();
            glassPaint.setShader(glassShader);
            canvas.drawOval(innerBoundingBox, glassPaint);
    
    Hier nochmal ganz gut im Bild zu sehen - der innere bunte Ring (Quelltext unten) funktioniert, hingegen die Schattierung am äußeren,grauen Ring (Quelltext oben) nicht :confused::confused::confused:.
    [​IMG]
     
    Zuletzt bearbeitet: 27.02.2010

Diese Seite empfehlen