Android canvas画图操作之切割画布实现方法(clipRect)_Android

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

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

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

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

//DIFFERENCE是第一次不同于第二次的部分显示出来
//REPLACE是显示第二次的
//REVERSE_DIFFERENCE 是第二次不同于第一次的部分显示
//INTERSECT交集显示
//UNION全部显示
//XOR补集 就是全集的减去交集生育部分显示

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, 30, 70, 70, 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, 50, Path.Direction.CCW);
    mPath.cubicTo(0, 0, 100, 0, 100, 100);
    mPath.cubicTo(100, 100, 0, 100, 0, 0);
    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();
  }
  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);
  }
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, canvas
, 画图
切割画布
canvas.cliprect、canvas cliprect 作用、canvas 清空画布、清除canvas画布内容、canvas清除画布,以便于您获取更多的相关知识。

时间: 2024-12-02 15:18:42

Android canvas画图操作之切割画布实现方法(clipRect)_Android的相关文章

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

本文实例讲述了Android canvas画图操作之切割画布实现方法.分享给大家供大家参考,具体如下: android切割画布的历程不算很难,可是理解起来也比较麻烦,这里写一下我的理解 但是不一定正确: canvas.clipRect(30, 30, 70, 70, Region.Op.XOR); 最后一个参数有多个选择分别是: //DIFFERENCE是第一次不同于第二次的部分显示出来 //REPLACE是显示第二次的 //REVERSE_DIFFERENCE 是第二次不同于第一次的部分显示

android操作XML的几种方法总结_Android

XML作为一种业界公认的数据交换格式,在各个平台与语言之上,都有广泛使用和实现.其标准型,可靠性,安全性......毋庸置疑.在android平台上,我们要想实现数据存储和数据交换,经常会使用到xml数据格式和xml文件. 小提示:android中存储数据一般有如下几种:SharedPreferences(参数化),XML文件,sqllite数据库,网络,ContentProvider(内容提供者)等. 在android中,操作xml文件,一般有几种方式:SAX操作,Pull操作,DOM操作等.

Android编程实现TextView字体颜色设置的方法小结_Android

本文实例讲述了Android编程实现TextView字体颜色设置的方法.分享给大家供大家参考,具体如下: 对于setTextView(int a)这里的a是传进去颜色的值.例如,红色0xff0000是指0xff0000如何直接传入R.color.red是没有办法设置颜色的,只有通过文章中的第三种方法先拿到资源的颜色值再传进去. 复制代码 代码如下: tv.setTextColor(this.getResources().getColor(R.color.red)); 关键字: android t

Android的HTTP操作库Volley的基本使用教程_Android

以前原本都用android内建的Library来进行GET.POST等等对API的连线与操作. 但最近想说来找找看有没有好用的library,应该可以事半功倍. 当初有找了三套比较多人用的 1.Android Asynchronous Http Client 2.okhttp square开发并且开源的,因为之前用过他们家的picasso,所以对这套满有好感的,只可惜使用方式不太喜欢 3.Volley Volley是Google在2013年Google I/O的时候发布的,到现在已经积累了很高的

Android App在线程中创建handler的方法讲解_Android

相关概念1.Handler:可以看做是一个工具类,用来向消息队列中插入消息的; 2.Thread:所有与Handler相关的功能都是与Thread密不可分的,Handler会与创建时所在的线程绑定; 3.Message:消息; 4.MessageQueue:消息队列,对消息进行管理,实现了一个Message链表; 5.Looper:消息循环,从MessageQueue中取出Message进行处理: 6.HandlerThread:继承Thread,实例化时自动创建Looper对象,实现一个消息循

Android应用开发中触摸屏手势识别的实现方法解析_Android

很多时候,利用触摸屏的Fling.Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scroll手势在 浏览器中滚屏,用Fling在阅读器中翻页等.在Android系统中,手势的识别是通过 GestureDetector.OnGestureListener接口来实现的,不过William翻遍了Android的官方文档也没有找到一个相 关的例子,API Demo中的TouchPaint也仅仅是提到了onTouch事件的处理,没有涉及到手势. 我们先来明确一些概念

Android通过LIstView显示文件列表的两种方法介绍_Android

在Android中通过ListView显示SD卡中的文件列表一共有两种方法,一是:通过继承ListActivity显示;二是:利用BaseAdapter显示.BaseAdapter是一个公共基类适配器,用于对ListView和Spinner等 一些控件提供显示数据.下面是利用BaseAdapter类来实现通过LIstView显示SD卡的步骤: 1.main.xml界面设计,如下图 复制代码 代码如下: <?xml version="1.0" encoding="utf-

Android中设置RadioButton在文字右边的方法实例_Android

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:ori

android+json+php+mysql实现用户反馈功能方法解析_Android

相信每个项目都会有用户反馈建议等功能,这个实现的方法很多,下面是我实现的方法,供大家交流.首先看具体界面,三个字段.名字,邮箱为选填,可以为空,建议不能为空.如有需要可以给我留言.  下面贴出布局代码,这里用到一个<include layout="@layout/uphead">就是把另外一个布局文件引入到这个布局中. 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> &l