您的位置:首页 > 移动开发 > Android开发

android clipPath切割画布

2014-12-02 16:27 357 查看
[java] view
plaincopy

public class PictureTestActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(new SampleView(this));

}

private static class SampleView extends View {

private Paint mPaint;

private Path mPath;

public SampleView(Context context) {

super(context);

setFocusable(true);

mPaint = new Paint();

mPaint.setAntiAlias(true);

mPaint.setStrokeWidth(6);

mPaint.setTextSize(16);

mPaint.setTextAlign(Paint.Align.RIGHT);

mPath = new Path();

}

private void drawScene(Canvas canvas) {

canvas.clipRect(0, 0, 100, 100);

canvas.drawColor(Color.WHITE);

mPaint.setColor(Color.RED);

canvas.drawLine(0, 0, 100, 100, mPaint);

mPaint.setColor(Color.GREEN);

canvas.drawCircle(30, 70, 30, mPaint);

mPaint.setColor(Color.BLUE);

canvas.drawText("Clipping", 100, 30, mPaint);

}

@Override

protected void onDraw(Canvas canvas) {

canvas.drawColor(Color.GRAY);

canvas.save();

canvas.translate(10, 10);

drawScene(canvas);

canvas.restore();

canvas.save();

canvas.translate(160, 10);

canvas.clipRect(10, 10, 90, 90);

canvas.clipRect(30, 30, 70, 70, Region.Op.DIFFERENCE);

drawScene(canvas);

canvas.restore();

canvas.save();

canvas.translate(10, 160);

mPath.reset();

canvas.clipPath(mPath); // makes the clip empty

mPath.addCircle(50, 50, 50, Path.Direction.CCW);

canvas.clipPath(mPath, Region.Op.REPLACE);

drawScene(canvas);

canvas.restore();

canvas.save();

canvas.translate(160, 160);

canvas.clipRect(0, 0, 60, 60);

canvas.clipRect(40, 40, 100, 100, Region.Op.UNION);

drawScene(canvas);

canvas.restore();

canvas.save();

canvas.translate(10, 310);

canvas.clipRect(0, 0, 60, 60);

canvas.clipRect(40, 40, 100, 100, Region.Op.XOR);

drawScene(canvas);

canvas.restore();

canvas.save();

canvas.translate(160, 310);

canvas.clipRect(0, 0, 60, 60);

canvas.clipRect(40, 40, 100, 100, Region.Op.REVERSE_DIFFERENCE);

drawScene(canvas);

canvas.restore();

}

}

}

效果如图:



canvas.clipRect(30, 30, 70, 70, Region.Op.XOR);最后一个参数有多个选择分别是:

//DIFFERENCE是第一次不同于第二次的部分显示出来

//REPLACE是显示第二次的

//REVERSE_DIFFERENCE 是第二次不同于第一次的部分显示

//INTERSECT交集显示

//UNION全部显示

//XOR补集 就是全集的减去交集生育部分显示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: