Was ich machen möchte? (blau als weiß geändert werden) Wie skizzieren Sie eine TextView?
Was habe ich?
Ich habe eine Klasse gefunden, die TextView erweitert, die in der Lage ist, Textview sehr nahe an dem zu gestalten, was ich möchte. Das Problem ist, dass ich die Strichfarbe nicht auf irgendeine Farbe ändern konnte, sondern immer schwarz gezeichnet. Wie wird die Rahmenfarbe als weiß eingestellt?
Was ist meine Ausgabe:
Wo meine Codes sind?
public class TypeFaceTextView extends TextView {
private static Paint getWhiteBorderPaint(){
Paint p = new Paint(Color.WHITE);
return p;
}
private static final Paint BLACK_BORDER_PAINT = getWhiteBorderPaint();
static {
BLACK_BORDER_PAINT.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
}
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(String.format(text.toString()), type);
}
private static final int BORDER_WIDTH = 1;
private Typeface typeface;
public TypeFaceTextView(Context context) {
super(context);
}
public TypeFaceTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setDrawingCacheEnabled(false);
setTypeface(attrs);
}
private void setTypeface(AttributeSet attrs) {
final String typefaceFileName = attrs.getAttributeValue(null, "typeface");
if (typefaceFileName != null) {
typeface = Typeface.createFromAsset(getContext().getAssets(), typefaceFileName);
}
setTypeface(typeface);
}
public TypeFaceTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setTypeface(attrs);
}
@Override
public void draw(Canvas aCanvas) {
aCanvas.saveLayer(null, BLACK_BORDER_PAINT, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
| Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.MATRIX_SAVE_FLAG);
drawBackground(aCanvas, -BORDER_WIDTH, -BORDER_WIDTH);
drawBackground(aCanvas, BORDER_WIDTH + BORDER_WIDTH, 0);
drawBackground(aCanvas, 0, BORDER_WIDTH + BORDER_WIDTH);
drawBackground(aCanvas, -BORDER_WIDTH - BORDER_WIDTH, 0);
aCanvas.restore();
super.draw(aCanvas);
}
private void drawBackground(Canvas aCanvas, int aDX, int aDY) {
aCanvas.translate(aDX, aDY);
super.draw(aCanvas);
}
}
Bitte schauen Sie sich das Bild an, es ist irrelevant, was ich machen möchte. –
Hallo Mustafa, ich habe die Lösung für Ihr Problem gepostet. Überprüfen Sie es, wenn es funktioniert, anstatt den "Schatten" Workaround zu verwenden. Vielen Dank. – Elye
mögliches Duplikat von [Textansicht für Android-Text] (http://stackoverflow.com/questions/3182393/android-textview-outline-text) –