Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在onDraw()中保存画布;_Java_Android_Android Canvas_Ondraw - Fatal编程技术网

Java 在onDraw()中保存画布;

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

我正在尝试将Canvas对象保存在onDraw()方法中。 这是因为我在onDraw方法中使用foreach循环,导致: canvas.DrawText(textitem、x、y、textpaint)
(我必须这样做,因为我在蒙版区域周围绘制文本)

我现在尝试的是:

@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)