android 画布控件,Android canvas画图操作之切割画布实现方法(clipRect)

本文实例讲述了Android canvas画图操作之切割画布实现方法。分享给大家供大家参考,具体如下:

android切割画布的历程不算很难,可是理解起来也比较麻烦,这里写一下我的理解 但是不一定正确:

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

最后一个参数有多个选择分别是:

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

//REPLACE是显示第二次的

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

//INTERSECT交集显示

//UNION全部显示

//XOR补集 就是全集的减去交集生育部分显示

15059113991.jpg?2016925142556

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Path;

import android.graphics.Region;

import android.util.AttributeSet;

import android.view.View;

public class sBook extends View{

Context mContext;

Paint mPaint;

Path mPath;

public sBook(Context context) {

super(context);

init();

}

public sBook(Context context,AttributeSet attrs) {

super(context,attrs);

init();

}

public sBook(Context context,AttributeSet attrs,int defStyle) {

super(context,attrs,defStyle);

init();

}

private void init(){

mPaint = new Paint();

mPaint.setAntiAlias(true);

mPaint.setStrokeWidth(6);

mPaint.setTextSize(16);

mPaint.setTextAlign(Paint.Align.RIGHT);

mPath = new Path();

}

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,Region.Op.XOR);

drawScene(canvas);

canvas.restore();

canvas.save();

canvas.translate(10,160);

mPath.reset();

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

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

mPath.cubicTo(0,100,100);

mPath.cubicTo(100,0);

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

drawScene(canvas);

canvas.restore();

canvas.save();

canvas.translate(160,160);

canvas.clipRect(0,60,60);

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

drawScene(canvas);

canvas.restore();

canvas.save();

canvas.translate(10,310);

canvas.clipRect(0,Region.Op.XOR);

drawScene(canvas);

canvas.restore();

canvas.save();

canvas.translate(160,Region.Op.REVERSE_DIFFERENCE);

drawScene(canvas);

canvas.restore();

}

private void drawScene(Canvas canvas) {

canvas.clipRect(0,100);

canvas.drawColor(Color.WHITE);

mPaint.setColor(Color.RED);

canvas.drawLine(0,mPaint);

mPaint.setColor(Color.GREEN);

canvas.drawCircle(30,mPaint);

mPaint.setColor(Color.BLUE);

canvas.drawText("Clipping",mPaint);

}

}

希望本文所述对大家Android程序设计有所帮助。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值