Ovale Dégradé dans Android
Je sais comment faire pour l'installation et l'affichage d'une forme ovale. Je sais comment faire pour appliquer un dégradé à cette forme. Ce que je ne peux pas savoir comment je peux obtenir un ovale de gradient pour correspondre à la forme.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<gradient
android:startColor="#66FFFFFF"
android:endColor="#00FFFFFF"
android:gradientRadius="100"
android:type="radial" />
</shape>
Si vous pouvez l'imaginer, ce gradient est semi transparent lueur blanche dans le milieu, puis disparaît à l'alpha zéro sur les bords. J'ai besoin de pour obtenir d'aller dans une forme ovale, et pas seulement un dégradé circulaire. Comment puis-je y parvenir?
OriginalL'auteur coneybeare | 2010-08-20
Vous devez vous connecter pour publier un commentaire.
C'est difficile étant donné un drawable défini de cette manière de dessiner eux-mêmes au moment de l'exécution, en s'adaptant à l'espace. Votre meilleure solution, si vous devez le faire dans le code, serait de prendre la forme drawable vous avez défini en XML et de le dessiner sur une Toile ou dans un Bitmap, comme un cercle parfait. À ce stade, le gradient va suivre le contour de la forme. Une fois la forme a été élaboré dans un contexte statique vous pouvez ajouter la forme d'un point de vue (comme arrière-plan, disons), qui risquent de déformer dans un ovale, lorsqu'il essaie de s'adapter à la vue de limites. Puisque vous avez une image, tout cela va fausser proportionnellement.
J'espère que cela ne sera pas de pixel trop mal avec cette méthode.
C'est ma mise en œuvre de votre idée: stackoverflow.com/questions/40811308/memory-heavy-oval-gradient
OriginalL'auteur
Je dirais plus "directe" dessin approche. Si vous pouvez dessiner gradient pixel par pixel, alors vous avez juste besoin de se rappeler que pour
r
r1+r2
Ici:
r - distance de cercle de centre
r1,r2 distances aux deux foyers de l'ellipse
EDIT:
Considérer ce Pixel Shader code:
Vous obtiendrez ovale quelque chose comme ça:
bonne chance
Cela dépend de comment par pixel calcul serait effectué. Si elle est exécutée sur GPU côté (gradient de calcul Pixel Shader) - ensuite, il est aussi rapide que l'éclair 🙂
OriginalL'auteur
OriginalL'auteur
Un "idiot mais de travail" façon de le faire serait d'établir votre contour de l'ellipse, puis une multitude d'ellipses imbriquées avec le même "centre", dont les tailles et les couleurs changent comme les ellipses plus petits, tout le chemin à un pixel de l'ellipse.
Si vous avez personnalisé le code de votre dégradé, interpoler les couleurs dans le HSV, pas en RVB !
OriginalL'auteur