是否可以阻止绘制超出Canvas
中SurfaceView
边框的位图(如位图或路径)的部分?
当我逐渐缩放超出Canvas
'尺寸的物体时,尤其是油漆模糊,这一切都会减慢到停滞状态,我必须等待几秒钟才能恢复控制 - 它没有响应。我通过在屏幕上移动手指来缩放对象;如果我做得太快并且扩展它,那么它确实会减慢绘图速度。
当使用普通的View
画布时,我没有遇到同样的问题,所以不知道是什么减慢了它。好像SurfaceView
响应太快然后变得拥挤。
因此,改进这一点的一个想法是阻止在画布外绘图,但不确定SurfaceView
是否有这样的剪辑选项。
答案 0 :(得分:1)
一种解决方案可能是使用接受源Canvas
/ .drawBitmap
参数的Rect
RectF
方法之一,以便只有{{{}的可见部分1}}被渲染。我刚刚在我自己的项目中完成了这项工作,以加快Bitmap
性能,我有几个SurfaceView
,有时只是部分可见。
答案 1 :(得分:1)
我不确定画布是否会实际超出维度,这不是一件明智的事情。不过,您可以使用clipRect()
来定义剪辑区域。
你是否应用像每帧模糊的滤镜?这可能相当昂贵。
另外,你是否在触摸事件上触发了绘制调用?触摸事件生成非常快,并且会使渲染线程泛滥。您可能希望以较慢的速度提取事件:https://groups.google.com/forum/?fromgroups=#!topic/android-developers/Oe6k1_bm38o
答案 2 :(得分:0)
将SurfaceView放在活动布局上时,可以使用填充属性,如:
android:paddingLeft="20dp"
android:paddingTop="20dp"
android:paddingRight="20dp"
android:paddingBottom="20dp"
它的工作原理如下:
要绘制画布,您可以使用以下方式绘制边界:
canvas.drawLine(1,1,canvas.getWidth()-1,1); //Top border
canvas.drawLine(1,1,1,canvas.getHeight()-1); //Left border
canvas.drawLine(1,canvas.getHeight()-1,canvas.getWidth()-1,canvas.getHeight()-1); //Bottom border
canvas.drawLine(canvas.getWidth()-1,1,canvas.getWidth()-1,canvas.getHeight()-1); //Right border