Nam*_*tha 40 android android-canvas android-view
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,上面的代码是否应该绘制一个矩形然后裁剪左上角?矩形没有被裁剪.
请解释一下clipRect的作用.什么是实际剪裁?在给定坐标的情况下,它是否以矩形的形式剪辑?如果是这样,为什么上面的代码不起作用?
Rib*_*ibo 77
Canvas.clipRect(left, top, right, bottom)减少了未来绘制操作可以写入的屏幕区域.它将clipBounds设置为当前剪切矩形和指定矩形的空间交集.clipRect方法有很多变体可以接受不同的区域形式,并允许对剪切矩形进行不同的操作.如果要显式设置剪切区域,请尝试:
canvas.clipRect(left, top, right, bottom, Region.Op.REPLACE);
Run Code Online (Sandbox Code Playgroud)
第五个参数表示替换剪切矩形,而不是创建与先前版本的交集.
尝试在drawRect语句之前移动clipRect语句.或者,尝试添加:
paint.setColor(Color.YELLOW);
drawRect(0,0,75,75);
Run Code Online (Sandbox Code Playgroud)
在你现有的clipRect语句之后.它应该绘制一个50x50的黄色正方形.
另一个注意事项:(在显然,很大程度上未记录的View/ViewGroup /绘图代码长期受挫之后),我发现canvas.translate(x,y)也调整了clipRect.clipRect和绘图矩阵的交互非常混乱.打印输出很有帮助:
canvas.getMatrix()
Run Code Online (Sandbox Code Playgroud)
和
canvas.getClipBounds()
Run Code Online (Sandbox Code Playgroud)
在修改画布之前和之后以及绘制之前.
要裁剪左上部分,请执行以下操作:
canvas.clipRect(0,0,50,50, Region.Op.DIFFERENCE);
// secondly...
canvas.drawRect(0,0,100,100, paint);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34888 次 |
| 最近记录: |