5

有没有办法防止绘制超出Canvasin边界的对象部分,如位图或路径SurfaceView

当我逐渐将对象缩放到超过Canvas' 大小时,尤其是在油漆模糊的情况下,它会减慢到静止状态,我必须等待几秒钟才能恢复控制 - 它没有响应。我通过在屏幕上移动手指来缩放对象;如果我做得太快并按比例放大,那么它真的会减慢绘图速度。

使用普通画布时我没有同样的问题View,所以不知道是什么让它变慢了。就好像SurfaceView反应太快,然后变得拥挤。

因此,改进这一点的一个想法是防止在画布外绘制,但不确定是否SurfaceView有这样的剪辑选项。

4

3 回答 3

1

我不确定画布是否真的会绘制超出尺寸的东西,这不是一件聪明的事情。不过,您可以使用它clipRect()来定义剪辑区域。

您是否应用了每帧模糊之类的过滤器?那可能相当昂贵。

另外,您是否在触摸事件上触发绘图调用?触摸事件的生成速度非常快,并且会淹没渲染线程。您可能希望以较慢的速度接收事件:https ://groups.google.com/forum/?fromgroups=#!topic/android-developers/Oe6k1_bm38o

于 2013-03-25T14:23:18.467 回答
1

一种解决方案可能是使用Canvas .drawBitmap接受源Rect/RectF参数的方法之一,以便仅Bitmap呈现可见部分。我刚刚在我自己的项目中完成了这项工作,以提高SurfaceView性能,我有几个Bitmaps有时只能部分查看。

于 2013-03-13T12:01:11.120 回答
0

当您将 SurfaceView 放在 Activity 的布局上时,您可以使用填充属性,例如:

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
于 2013-03-21T05:16:03.443 回答