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的作用。实际剪裁是什么?在给定坐标的情况下,它是否以矩形的形式进行裁剪?如果是这样,为什么上面的代码不起作用?
最佳答案
Canvas.clipRect(left, top, right, bottom)
减小了将来绘制操作可以写入的屏幕区域。它将clipBounds设置为当前裁剪矩形和指定矩形的空间相交。 clipRect方法有很多变体,它们接受不同形式的区域并允许对剪切矩形进行不同的操作。如果要显式设置剪切区域,请尝试:
canvas.clipRect(left, top, right, bottom, Region.Op.REPLACE);
第5个参数表示替换剪切矩形,而不是与以前的版本创建交集。
尝试将clipRect语句移到drawRect语句之前。或者,尝试添加:
paint.setColor(Color.YELLOW);
drawRect(0,0,75,75);
在您现有的clipRect语句之后。它应该在您之前的内容上绘制一个50x50的黄色正方形。
另一个注意事项:(在对看似很久没有记录的View/ViewGroup/绘图代码长期感到沮丧之后),我发现canvas.translate(x,y)也可以调整clipRect。 clipRect和绘图矩阵的交互非常困惑。打印出来是有帮助的:
canvas.getMatrix()
和
canvas.getClipBounds()
在对 Canvas 进行修改之前和之后以及在绘制事物之前。
关于android - 使用clipRect-说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3331805/