(转自:http://wallage.blog.163.com/blog/static/1738962420101012439991/)
- 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补集 就是全集的减去交集生育部分显示
相关推荐
在Android的Canvas类中,`clipPath()`是一个用于剪裁绘制区域的方法,它可以将当前的绘图限制在一个特定的路径内。通过这个功能,我们可以创建出各种形状的视图,比如圆形。在实现CircleImageView时,我们可以通过`...
本篇文章将详细介绍如何使用`clipRect`方法来切割Android Canvas画布,以及它的工作原理和相关选项。 `clipRect`方法允许开发者限制在画布上绘制的区域,换句话说,它可以帮助我们“剪裁”或“切割”画布。此方法的...
这份“安卓Android源码——(Canvas画布).rar”压缩包很可能是包含了一些关于Canvas使用的源代码示例或者解析,帮助我们深入理解Android图形绘制的底层机制。 Canvas是Android中的一个类,它允许开发者通过调用其...
本项目源码深入探讨了如何利用Canvas在Android应用中实现画布操作,非常适合毕业设计或移动开发App的学习者参考。以下是Canvas画布相关的知识点详解: 1. **Canvas基本概念**: - Canvas是Android中的一个类,它...
ClipPath是一款实用的工具,主要用于方便用户快速复制和管理文件路径。在日常的计算机操作中,我们经常需要复制文件或文件夹的路径,以便在不同的程序或文件夹之间进行引用。传统的复制路径方法可能繁琐且易出错,而...
本主题聚焦于SVG中的`clipPath`元素,这是一种强大的工具,可以用来定义图形显示的区域,通过裁剪或遮罩的方式实现各种视觉效果。在这个“基于SVG clipPath的预览图变形特效幻灯片”中,我们将深入探讨如何利用这个...
这是codrops出品的一款HTML5 SVG clipPath炫酷卡片膨胀动画特效。该特效采用网格卡片布局,当用户点击其中一张卡片的时候,伴随一个非常酷的运动效果,它会切换到另一个页面,并变形为封面图片。
本篇文章将详细讲解如何在Android中创建一个具有图片斜切功能的自定义控件,该控件是基于ImageView进行扩展的,支持加载本地或网络图片,并可以根据实际需求进行定制化的图片切割。 首先,我们创建一个新的类,继承...
我们需要计算图像的半径,并确保画布的剪切区域是圆形的。 ```java @Override protected void onDraw(Canvas canvas) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), getImageResource()); if ...
`Canvas`是用来绘制图形的画布,而`Path`则是定义图形形状的对象。通过解析矢量图的XML,我们可以获取到各个路径元素,然后用`Canvas`在指定区域内绘制这些路径。 2. **提取矢量图部分**:如果你需要从矢量图中提取...
2. **圆形头像**:很多应用倾向于使用圆形或椭圆形头像,可以使用`android.graphics.Path`和`android.graphics.Canvas`来绘制,或者使用`ClipPath`属性。自API 21起,Android引入了`android.widget.ImageView`的`...
- `Shader`类是Android图形系统的一部分,它定义了颜色和纹理如何应用于画布上的形状。 2. **Paint对象** - 使用`Paint`对象,我们可以设置`BitmapShader`并将其应用于我们的`Canvas`。`Paint`对象包含了绘制时的...
在`onDraw`方法中,我们首先调用`super.onDraw`绘制文本,然后根据圆角半径是否大于零决定是否使用`Path`和`addRoundRect`来创建一个带有圆角的矩形,并通过`canvas.clipPath`裁剪画布。最后,使用`canvas.drawPaint...
3. **绘制半圆**:使用`Path`对象构建半圆形路径,然后使用`canvas.clipPath(path)`来限制画布的绘制区域。以下代码示例创建一个半圆路径: ```java Path path = new Path(); path.addArc(new RectF(0, 0, width,...
本文介绍了在Android应用中实现圆形头像绘制的两种方法:使用`BitmapShader`和使用`Path`配合`ClipPath`。每种方法都有其适用场景和优缺点,开发者可以根据具体需求选择合适的方法来实现圆形头像的功能。同时,还...
接着调用`canvas.clipPath(path)`来裁剪Canvas,限制绘制区域为圆形。最后,调用`super.onDraw(canvas)`来绘制相机预览。 4. **开启相机预览**:在自定义的SurfaceView中,你需要设置一个`SurfaceHolder.Callback`...
- Canvas是Android系统提供的一个类,它提供了在二维画布上进行绘制的方法。 - 通常,我们会在一个Bitmap对象上操作Canvas,因为Bitmap是Android中的像素存储介质,Canvas则负责在Bitmap上进行绘制操作。 - 除了...
在ElasticView的`onDraw()`方法中,开发者需要使用Canvas来绘制视图的背景、边框以及内容,同时根据当前的弯曲状态调整画布的剪裁区域(`clipPath()`或`clipRect()`)和变形(`drawARGB()`或`drawBitmapMatrix()`)...
4. **自定义View**:如【描述】所述,创建一个自定义的ImageView子类,在onDraw()方法中利用canvas.clipPath()或者canvas.drawRoundRect()来绘制圆形或圆角图片。 5. **使用第三方库**:例如,`CircleImageView` 或...