Java 在onDraw()中保存画布;
我正在尝试将Canvas对象保存在onDraw()方法中。 这是因为我在onDraw方法中使用foreach循环,导致: canvas.DrawText(textitem、x、y、textpaint)Java 在onDraw()中保存画布;,java,android,android-canvas,ondraw,Java,Android,Android Canvas,Ondraw,我正在尝试将Canvas对象保存在onDraw()方法中。 这是因为我在onDraw方法中使用foreach循环,导致: canvas.DrawText(textitem、x、y、textpaint) (我必须这样做,因为我在蒙版区域周围绘制文本) 我现在尝试的是: @Override public void onDraw(Canvas canvas) { if (hasrun = false) { for(CustomTextViewDrawItem i
(我必须这样做,因为我在蒙版区域周围绘制文本) 我现在尝试的是:
@Override
public void onDraw(Canvas canvas)
{
if (hasrun = false)
{
for(CustomTextViewDrawItem item : drawItemList)
{
canvas.drawText(item.Text, item.X, item.Y, textPaint);
}
if (eLabel.backgroundGradient != null)
{
canvas.drawPath(path, fillPaint);
}
canvas.save();
savedCanvas = canvas ;
}
else
{
canvas = savedCanvas;
}
hasrun = true;
super.onDraw(canvas);
}
调试时,我看到它看起来不错,但结果却是空的。
让它工作的最好方法是什么 您可以尝试保存位图:(我认为最好调用super.onDraw(canvas);在方法的开头,因为与视图相关的绘图将位于顶部)
也许这是因为:
if (hasrun = false)
我想你打算这样做:
if (hasrun == false)
您对save()函数有什么期望?也许你误解了它的工作原理。是的,老鼠是对的,我想你误解了画布。save()。你到底想做什么?请张贴将
画布添加到活动中的位置,以及如何声明这两个画布字段。是的,我显然误解了保存部分。一开始似乎合乎逻辑。我们应该调查一下。现在苏达尔的方法正在起作用。sanjay:这是扩展textview的customclass的一部分。这很好,但我正在努力提高性能并减少分配。位图保存提高了性能,但内存密集。谢谢,此方法似乎工作正常。然而,它确实会带来新的问题。准确地说,OutofMemoryError是错误的。外部分配太大,无法执行此过程。我想这是很多位图分配的方式。另外,有点奇怪,当我把super.Ondraw(canvas)放在开头时,背景画得很好,但文本不会?放在最后按预期工作。。。为什么会这样?如果您仍然使用代码hasrun=false,那么应该是hasrun==false将Config.ARGB_8888更改为RGB_565可以节省一些空间,这就是为什么我总是编写if(false==hasrun)
=)
if (hasrun == false)