79 votes

Comment faire de l'éclat d'un texte?

Peut-on appliquer l'effet lumineux à un texte comme indiqué ci-dessous:

enter image description here

Mise à jour: Veuillez aussi me dire quelles sont les choses que j'ai besoin de créer quelque chose comme ceci:enter image description here

Ai-je besoin d'une police Spéciale pour cela?

116voto

Bemmu Points 5005

Comment sur la définition d'une ombre bleue pour le textview en utilisant android:shadowColor et réglage de l' android:shadowDx et android:shadowDy de zéro, avec un assez grand android:shadowRadius?

6voto

radley Points 1053

Pour les effets de texte avancés:

Est-il un moyen d'ajouter de l'intérieur de l'ombre à une TextView Android?

En particulier: MagicTextView

Je l'ai utilisé pour les Widgets HD Led: https://market.android.com/details?id=cloudtv.hdwidgets

2voto

MrSewerPickle Points 11

Bemmu est droit. C'est la meilleure façon de loin, sans passer par les plein OpenGL route. Vous voulez également vous assurer que les TextView un aquate rembourrage défini sur chaque côté, sinon un grand rayon de l'ombre qui correspond à l'origine de la couleur de texte (ou une légère teinte plus claire) permettra de montrer les dropshadow détourage de chaque côté de la TextView.

Vous pourriez même être en mesure d'obtenir encore plus d'un effet de flou par la création d'un affichage en couches groupe avec l'augmentation/la diminution de dropshadow effets (pas sûr de ce que le rendu de perf serait cependant)

1voto

Hsiao-Ting Points 1

J'ai eu une solution de contournement pour atteindre l'exigence, mais pas encore parfait....

L'exemple de résultat:

https://cloud.githubusercontent.com/assets/5714437/3962552/d5c29fee-276c-11e4-9ea3-d1b31d8c54ac.png

Point clé: * Donner à la Peinture, dessiner huit fois dans l' onDraw() de TextView *

public class ShadowTextView extends TextView {
private final Paint mStrokePaint = new Paint();
private final Rect mTextBounds = new Rect();
public ShadowTextView(Context context) {
    super(context);
    setupPaint();
}

public ShadowTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setupPaint();
}

public ShadowTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    setupPaint();
}

protected void onDraw(Canvas canvas) {
    // Get the text to print
    final String text = super.getText().toString();
    // Figure out the drawing coordinates
    super.getPaint().getTextBounds(text, 0, text.length(), mTextBounds);
    float radius = (float) Math.hypot(3, 3);
    // draw everything
    drawShadow(canvas, text, 0, 3);
    drawShadow(canvas, text, 0, -3);
    drawShadow(canvas, text, 3, 0);
    drawShadow(canvas, text, -3, 0);

    drawShadow(canvas, text, radius, radius);
    drawShadow(canvas, text, -radius, radius);
    drawShadow(canvas, text, radius, -radius);
    drawShadow(canvas, text, -radius, radius);

    super.onDraw(canvas);
}

private void drawShadow (Canvas canvas, String text, float dx, float dy) {
    mStrokePaint.setShadowLayer(3, dx, dy, Color.BLACK);
    mStrokePaint.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP));
    canvas.drawText(text,
            0.0f + this.getPaddingLeft() * 1.0f , (super.getHeight() + mTextBounds.height()) * 0.5f,
            mStrokePaint);
}

private final void setupPaint() {
    mStrokePaint.setAntiAlias(true);
    mStrokePaint.setStyle(Paint.Style.FILL);
    // setup stroke
    mStrokePaint.setColor(0x75000000);
    mStrokePaint.setStrokeWidth(5);
    mStrokePaint.setTextSize(super.getTextSize());
    mStrokePaint.setFlags(super.getPaintFlags());
    mStrokePaint.setTypeface(super.getTypeface());
    mStrokePaint.setStrokeCap(Cap.ROUND);
    mStrokePaint.setStrokeJoin(Join.ROUND);
}

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X