我正在尝试找到一个简单的解决方案,为文本添加一个轮廓,使其无论背后的背景如何都能脱颖而出。
此问题之前已标记为重复,但链接的答案不起作用。因此,这仍然是一个持续的问题。答案如下:
@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)
关于如何让这个工作的任何进一步的想法,任何人?
答案 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" />