Android黑色轮廓围绕文字

时间:2015-08-02 03:57:25

标签: android text

我正在尝试找到一个简单的解决方案,为文本添加一个轮廓,使其无论背后的背景如何都能脱颖而出。

此问题之前已标记为重复,但链接的答案不起作用。因此,这仍然是一个持续的问题。答案如下:

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
Paint strokePaint = new Paint();
strokePaint.setARGB(255, 0, 0, 0);
strokePaint.setTextAlign(Paint.Align.CENTER);
strokePaint.setTextSize(16);
strokePaint.setTypeface(Typeface.DEFAULT_BOLD);
strokePaint.setStyle(Paint.Style.STROKE);
strokePaint.setStrokeWidth(2);

Paint textPaint = new Paint();
textPaint.setARGB(255, 255, 255, 255);
textPaint.setTextAlign(Paint.Align.CENTER);
textPaint.setTextSize(16);
textPaint.setTypeface(Typeface.DEFAULT_BOLD);

Path path = new Path();
String text = "Some Text";
textPaint.getTextPath(text, 0, text.length(), 0, 100, path);
canvas.drawPath(path, strokePaint);
canvas.drawPath(path, textPaint);

super.draw(canvas, mapView, shadow);
}

该行:

super.draw(canvas, mapView, shadow);

被编译器选为错误。 .draw部分为红色,因为它“无法解析方法”。由于此解决方案不是一个有效的解决方案,因此这个问题不重复。

我还尝试了另一个创建类的示例,如下所示:(编辑如下,编译器强制我添加构造函数,如图所示)。

 public class OutlineTextView extends TextView {

public OutlineTextView(Context context) {  //added this section
    super(context);
}

@Override
public void draw(Canvas canvas) {
    for (int i = 0; i < 5; i++) {
        super.draw(canvas);
    }
}
}

然后xml文件尝试使用此类,如下所示:

<OutlineTextView
    android:shadowColor="#000"
    android:shadowRadius="3.0"
    android:id="@+id/score"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="20"
    android:textSize="160dp"
    android:typeface="sans"
    android:textColor="#ffffe0"
    android:layout_marginTop="60dp"
    android:layout_centerHorizontal="true" />

尝试启动此活动时会抛出错误:

Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.OutlineTextView" on path: DexPathList[[zip file "/data/app/rule02.touchpool-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

关于如何让这个工作的任何进一步的想法,任何人?

1 个答案:

答案 0 :(得分:1)

您需要将完整的程序包名称用于自定义视图。所以你当前的布局应该成为,

<com.example.OutlineTextView
    android:shadowColor="#000"
    android:shadowRadius="3.0"
    android:id="@+id/score"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="20"
    android:textSize="160dp"
    android:typeface="sans"
    android:textColor="#ffffe0"
    android:layout_marginTop="60dp"
    android:layout_centerHorizontal="true" />