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/

10-10 02:17