Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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
Android自定义视图闪烁_Android_View_Surfaceview_Flicker - Fatal编程技术网

Android自定义视图闪烁

Android自定义视图闪烁,android,view,surfaceview,flicker,Android,View,Surfaceview,Flicker,很久以来我一直在努力解决我的问题。然而,我不知所措。问题是: 我有一个自定义的Android视图,我可以在上面渲染10个矩形(有点像) 就像条形图一样(长度相同,颜色不同) 当使用不同的不透明度更新其中一个矩形时,它将 不会改变。所以我清理了画布。但这会引起闪烁, 不是所有的时间,但有时 我试着做的是: 将所有内容渲染为屏幕外位图,然后blting它,这仍然有效 不能解决我的问题 使用SurfaceView并在其他线程中渲染 1和2的组合 最后,我想问题是背景被抹掉了,但我不想抹掉。然而,我永远

很久以来我一直在努力解决我的问题。然而,我不知所措。问题是:

  • 我有一个自定义的Android视图,我可以在上面渲染10个矩形(有点像) 就像条形图一样(长度相同,颜色不同)

  • 当使用不同的不透明度更新其中一个矩形时,它将 不会改变。所以我清理了画布。但这会引起闪烁, 不是所有的时间,但有时

  • 我试着做的是:

  • 将所有内容渲染为屏幕外位图,然后blting它,这仍然有效 不能解决我的问题

  • 使用SurfaceView并在其他线程中渲染

  • 1和2的组合
  • 最后,我想问题是背景被抹掉了,但我不想抹掉。然而,我永远无法让新的“像素”显示出来。我还尝试了不同的传输模式,比如SRC,SRC_-top,当我尝试第1种时,它会有所帮助,但并不能解决这个问题


    有人对可能出现的问题有任何指导吗?还是其他可能的解决方案?

    我终于找到了答案。我不需要清除背景,只是暂时将绘制模式更改为SRC

    context.paint.setStyle(Paint.Style.FILL);
    context.paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
    context.canvas.drawPath(context.path, context.paint);
    context.paint.setXfermode(null);