Cri*_*unu 1 java android text android-canvas
我已经开始研究游戏,当游戏结束时,它会显示一个包含游戏统计数据的棋盘.获胜者的名字是在拱顶上绘制的(使用TextOnPath类,我将在此处粘贴代码).文本在Android 4.1.2中正确显示,但Android 4.0.3或更低版本不会发生同样的事情(我已附加图片向您展示).
我的问题是:我的计划有什么问题?我的min-SDK是8,我没有使用JB中引入的任何新API.请帮我找一个解决方案.
这是我的类(没有显示文本所需的方法):
public class TextOnPath extends View {
private String winner = "Computer";
private Path mArc;
int viewHeight, viewWidth;
private Paint mPaintText;
public TextOnPath(Context context) {
super(context);
}
public TextOnPath(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
int offset = 0;
if (offset < 16)
offset = (18 - winner.length()) * 11;
canvas.drawTextOnPath(winner, mArc, offset, 40, mPaintText);
invalidate();
}
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) {
super.onSizeChanged(xNew, yNew, xOld, yOld);
viewWidth = xNew;
viewHeight = yNew;
Typeface chalk = Typeface.createFromAsset(getContext().getAssets(),
"fonts/Chalkduster.ttf");
// TODO Auto-generated constructor stub
mArc = new Path();
int pad = 20;
RectF oval = new RectF(pad, 0, viewWidth - pad, viewHeight);
mArc.addArc(oval, -180, 180);
mPaintText = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaintText.setStyle(Paint.Style.FILL_AND_STROKE);
mPaintText.setColor(Color.WHITE);
int textsize = R.dimen.chalk_text_size;
System.err.println(textsize);
mPaintText.setTextSize(30f);
mPaintText.setTypeface(chalk);
this.setBackgroundResource(R.color.green);
}
Run Code Online (Sandbox Code Playgroud)
这里我发布了2个截图.第一个来自JB,第二个来自ICS.


非常感谢您的宝贵时间!
在Android 4.1之前,硬件加速不支持drawTextOnPath().要解决此问题,只需在Android <4.1上运行时在View上设置软件图层类型.只需调用View.setLayerType(View.LAYER_TYPE_SOFTWARE,null).这将强制软件呈现并修复您的问题.
| 归档时间: |
|
| 查看次数: |
706 次 |
| 最近记录: |