使用clipRect - 说明
public class POCII extends Activity {
myView mv = new myView(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mv);
}
}
class myView extends View {
public myView(Context context) {
super(context);
}
@Override
public void onDraw(Canvas canvas) {
Paint paint = new Paint();
canvas.drawRect(0,0,100,100, paint);
canvas.clipRect(0,0,50,50);
}
}
我的问题是,不应该上面的代码绘制一个矩形,然后裁剪左上部分?矩形不会被裁剪。使用clipRect - 说明
请解释一下clipRect的作用。它究竟是什么剪辑?考虑到坐标,它是否以矩形的形式剪辑?如果是这样,为什么上面的代码不工作?
帆布。 clipRect(left, top, right, bottom)减少了未来绘制操作可以写入的屏幕区域。它将clipBounds设置为当前剪裁矩形和指定的矩形的空间相交。 clipRect方法有很多变体,它们接受区域的不同形式,并允许剪切矩形上的不同操作。如果你想明确地设置裁剪区域,请尝试:
canvas.clipRect(left, top, right, bottom, Region.Op.REPLACE);
第五届参数是指更换剪切的矩形,而不是创建一个与以前版本的交集。
尝试在drawRect语句之前移动clipRect语句。或者,请尝试添加:
paint.setColor(Color.YELLOW);
drawRect(0,0,75,75);
您现有的clipRect语句后。它应该绘制一个50x50的黄色正方形,胜过以前的东西。我发现canvas.translate(x,y)也调整了clipRect。我发现canvas.translate(x,y)也调整了clipRect。 clipRect和绘图矩阵的交互非常混乱。这是有帮助的打印输出:
canvas.getMatrix()
和
canvas.getClipBounds()
前和修改后的画布和绘图以前的事情。
上canvas.translate(X,Y)与clipRect搞乱的说明是非常有用的。给了我很多挫折。谢谢! – 2013-08-26 12:02:00
“Region.Op”的方法现在显然已被弃用。 – Suragch 2017-04-01 03:29:20
如何从剪裁的画布中获取原始画布? – 2017-12-24 20:10:20
要裁剪的左上部分,这样做:
canvas.clipRect(0,0,50,50, Region.Op.DIFFERENCE);
// secondly...
canvas.drawRect(0,0,100,100, paint);
ICS及以上...
异,差异与ReverseDifference夹模式 由ICS如果启用硬件加速忽略。
在你看来只是禁用2D硬件加速:
myView.setLayerType(View.LAYER_TYPE_SOFTWARE,NULL);
检查http://youtu.be/vkTn3Ule4Ps?list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu – 2015-01-13 01:21:19