Android Canvas方法总结

Android中的canvas介绍 3、绘制的东西4、绘制的画笔Paint(颜色和样式)Canvas对象的获取方式有三种:第一种我们通过重写View.onDraw方法,View中的Canvas对象会被当做参数传递过来,我们操作这个Canvas,效果会直接反应在View中。第二种就是当你想自己创建一个Canvas对象。从上面的基本要素可以明白,一个Canvas对象一定是结合了一个Bitmap对象的。所以一定要为一个Canvas对象设置一个Bitmap对象。[java] view plain copy//得到一个Bitmap对象,当然也可以使用 阅读详情

        前言:当我们进行自定义控件的时候,为了实现更多更炫酷的效果,我们通常都需要在Canvas(画布) 上绘制各种东西。而谷歌也提供了很多的API方法,能让我们更方便更快捷的实现想要的效果。

Canvas
public class Canvas
extends Object
java.lang.Object
      ↳ android.graphics.Canvas

        Canvas类包含“绘制”调用。要绘制一些东西,你需要4个基本组件:一个用于保存像素的位图,一个用于托管绘图调用的Canvas(写入位图),一个绘图基元(例如Rect,Path,text,Bitmap)和一个paint(描述绘图的颜色和样式)。


在介绍画布方法之前,先简单说下画笔的常用方法,毕竟我们要看到的效果都是用画笔实现的:

reset(): 重置画笔
setColor(int color) :给画笔设置颜色值
setARGB(int a, int r, int g, int b) :同样是设置颜色,但是利用ARGB分开设置
setAlpha(int a): 设置画笔透明度
setStyle(Paint.Style style) :设置画笔样式,取值有
Paint.Style.FILL :填充内部
Paint.Style.FILL_AND_STROKE :填充内部和描边
Paint.Style.STROKE :仅描边
setStrokeWidth(float width) :设置画笔宽度
setAntiAlias(boolean aa): 设置画笔是否抗锯齿
setStrokeCap(Paint.Cap cap) 设置线冒样式,取值有Cap.ROUND(圆形线冒)、Cap.SQUARE(方形线冒)、Paint.Cap.BUTT(无线冒)`
setStrokeJoin(Paint.Join join) :设置线段连接处样式,取值有:Join.MITER(结合处为锐角)、Join.Round(结合处为圆弧)、Join.BEVEL(结合处为直线)


        下面介绍下Canvas 的常用方法,先看下总的内容:
这里写图片描述

一、画布变换

1、translate(位移)

/**
 * 画布向(100,100)方向平移
 *
 * @param dx 向X轴方向平移100px
 * @param dy 向Y轴方向平移100px
 */
canvas.translate(100, 100);

        看下效果图:
这里写图片描述
        注意:translate()是可以叠加的,而且这里实际上移动的是坐标,画布的位置并没有变,也就是说坐标原点变到了原来(100,100)的位置

2、rotate(旋转)

/**
 * 原点为中心,旋转45度(顺时针方向为正方向 )
 * 
 * @param degrees 旋转角度
 */
canvas.rotate(45);

        效果图如下:
这里写图片描述
        旋转还有另外一个方法:canvas.rotate(float degrees, float px, float py);

/**
 * Preconcat the current matrix with the specified rotation.
 *
 * @param degrees The amount to rotate, in degrees
 * @param px The x-coord for the pivot point (unchanged by the rotation)
 * @param py The y-coord for the pivot point (unchanged by the rotation)
 */
public final void rotate(float degrees, float px, float py) {
    if (degrees == 0.0f) return;
    translate(px, py);
    rotate(degrees);
    translate(-px, -py);
}

        根据源码可以很明显的看到,其实就是先平移到指定位置,在指定位置进行了旋转之后又对画布做了返回平移处理,这样就实现了以自定义点为中心旋转画布的效果。

3、scale(缩放)

/**
 * 在X轴方向放大为原来2倍,Y轴方向方大为原来的4倍
 * 
 * @param sx X轴的放大倍数 
 * @param sy Y轴的放大倍数
 */
canvas.scale(2, 4);

        效果图如下:
这里写图片描述
        缩放的另外一个方法:canvas.scale(float sx, float sy, float px, float py);

/**
 * Preconcat the current matrix with the specified scale.
 *
 * @param sx The amount to scale in X
 * @param sy The amount to scale in Y
 * @param px The x-coord for the pivot point (unchanged by the scale)
 * @param py The y-coord for the pivot point (unchanged by the scale)
 */
public final void scale(float sx, float sy, float px, float py) {
    if (sx == 1.0f && sy == 1.0f) return;
    translate(px, py);
    scale(sx, sy);
    translate(-px, -py);
}

        同理,也是先实现平移,在指定位置缩放之后又对画布做了返回平移处理,从而实现了以自定义点为中心缩放画布的效果。

4、skew(倾斜)

/**
 * 在Y轴方向倾斜
 *
 * @param sx x轴方向上倾斜的对应角度
 * @param sy Y轴方向上倾斜的对应角度
 */
canvas.skew(0,1f);

        注意:这里的倾斜的角度都是tan值,比如要在x轴方向上倾斜60度,那么小数值对应:tan 60 = 根号3 = 1.732!因为效果不好画,就不上效果图了,毕竟这个方法用的也少。

二、绘制方法(drawXXX)

1、drawPoint、drawPoints(绘制点)

/**
 * 绘制出一个点
 * 
 * @param x X轴方向上的位置
 * @param y Y轴方向上的位置
 * @param Paint 画笔对象        
 */
canvas.drawPoint(200, 200, redPaint);

         点的大小取决于画笔的大小,不光可以绘制出单个点,也可以绘制出多个点:

float pts[] = {200, 200, 250, 250, 300, 300, 350, 350};
/**
 * 绘制出多个点
 *
 * @param pts 要绘制点的float数组,格式是[x0 y0 x1 y1 x2 y2 ...],每两组一个点,最后不足两个的,忽略最后的值
 * @param Paint 画笔对象
 */
canvas.drawPoints(pts, redPaint);

        看效果图:
这里写图片描述

2、drawLine、drawLines(绘制线)

/**
 * 绘制出一条线
 * 
 * @param startX 线的起点的X坐标
 * @param startY 线的起点的Y坐标
 * @param stopX 线的终点的X坐标
 * @param stopY 线的终点的X坐标
 * @param Paint 画笔对象              
 */
canvas.drawLine(200, 200, 400, 400, redPaint);

         线的大小也取决于画笔的大小,并且也是可以绘制出多条线:

float[] pts = new float[]{100, 100, 200, 200, 200, 100, 300, 100};
/**
 * 同时绘制多条线。
 * 
 * @param pts  要绘制线的float数组,格式是每四个一组为一条线。最后不足四个,就忽略那些值。
 * @param Paint 画笔对象
 */
canvas.drawLines(pts, redPaint);

        看一下效果图:
这里写图片描述

3、drawRect、drawRoundRect(绘制矩形)

/**
 * 矩形   (第一种方法)
 *  
 * @param left int 矩形左侧的X坐标
 * @param top int 矩形顶部的Y坐标
 * @param right int 矩形右侧的X坐标
 * @param bottom int 矩形底部的Y坐标
 */
Rect rect = new Rect(100, 100, 300, 300);
/**
 * 绘制矩形
 *
 * @param rect 矩形对象
 * @param paint 画笔对象
 */
canvas.drawRect(rect, redPaint);

/**
 * 矩形   (第三种方法)
 *  
 * @param left float 矩形左侧的X坐标
 * @param top float 矩形顶部的Y坐标
 * @param right float 矩形右侧的X坐标
 * @param bottom float 矩形底部的Y坐标
 */
RectF rectF = new RectF((float) 100.3, 100, 300, 300);
/**
 * 绘制矩形
 *
 * @param rectF 矩形对象
 * @param paint 画笔对象
 */
canvas.drawRect(rectF, redPaint);

/**
 * 绘制矩形   (第三种方法)
 *
 * @param left float 矩形左侧的X坐标
 * @param top float 矩形顶部的Y坐标
 * @param right float 矩形右侧的X坐标
 * @param bottom float 矩形底部的Y坐标
 * @param paint 画笔对象
 */
canvas.drawRect((float) 100.3, 100, 300, 300, redPaint);

        OK,看下效果:
这里写图片描述
Canvas 也给我们提供了圆角矩形的方法,我们来看下:

/**
 * 绘制圆角矩形   (第一种方法)
 *
 * @param rectF 矩形对象
 * @param rx 围绕角落的椭圆的X半径
 * @param ry 围绕角落的椭圆的Y半径
 * @param paint 画笔对象
 */
canvas.drawRoundRect(rectF,20,20,redPaint);

/**
 * 绘制圆角矩形  (第二种方法)
 *
 * @param left float 矩形左侧的X坐标
 * @param top float 矩形顶部的Y坐标
 * @param right float 矩形右侧的X坐标
 * @param bottom float 矩形底部的Y坐标
 * @param rx 围绕角落的椭圆的X半径
 * @param ry 围绕角落的椭圆的Y半径
 * @param paint 画笔对象
 */
canvas.drawRoundRect((float) 100.3, 100, 300, 300,20,20,redPaint);

        效果图如下:
这里写图片描述

4、drawOval(绘制椭圆)

/**
 * 绘制椭圆   (第一种方法)
 *
 * @param rectF 矩形对象要绘制椭圆的矩形边界
 * @param paint 画笔对象
 */
canvas.drawOval(rectF, redPaint);

/**
 * 绘制椭圆  (第二种方法)
 *
 * @param left float 矩形边界左侧的X坐标
 * @param top float 矩形边界顶部的Y坐标
 * @param right float 矩形边界右侧的X坐标
 * @param bottom float 矩形边界底部的Y坐标
 * @param paint 画笔对象
 */
canvas.drawOval((float) 100.3, 100, 300, 200, redPaint);

这里写图片描述

5、drawCircle(绘制圆)

/**
 * 绘制圆  
 *
 * @param cx 要绘制的圆的中心的X坐标
 * @param cy 要绘制的圆的中心的Y坐标
 * @param radius 要绘制的圆的半径
 * @param paint 画笔对象
 */
canvas.drawCircle(200,200,100,redPaint);

        继续上效果图:
这里写图片描述

6、drawArc(绘制圆弧)

/**
 * 绘制圆弧
 *
 * @param oval RectF对象,椭圆的边界用于定义弧的形状和大小
 * @param startAngle 开始的角度。(水平向右为0度顺时针反向为正方向)
 * @param sweepAngle 扫过的角度
 * @param useCenter 是否和中心连线
 * @param paint 画笔对象
 */
canvas.drawArc(rectF, 0, 90, true, redPaint);

        效果图如下:
这里写图片描述

7、drawColor、drawRGB、drawARGB(绘制颜色)

 /**
  * 绘制颜色  (第一种方法)
  *
  * @param color 颜色值
  */
canvas.drawColor(Color.RED);

/**
 * 绘制颜色  (第二种方法)
 *
 * @param r 要绘制到画布上的颜色的红色成分,范围在0-255之间
 * @param g 要绘制到画布上的颜色的绿色成分,范围在0-255之间
 * @param b 要绘制到画布上的颜色的蓝色成分,范围在0-255之间
 */
canvas.drawRGB(255, 0, 0);

/**
 * 绘制颜色  (第三种方法)
 * @param a 要绘制到画布上的颜色的alpha分量(0-255)
 * @param r 要绘制到画布上的颜色的红色成分,范围在0-255之间
 * @param g 要绘制到画布上的颜色的绿色成分,范围在0-255之间
 * @param b 要绘制到画布上的颜色的蓝色成分,范围在0-255之间
 */
canvas.drawARGB(255,255,0,0);

8、drawText, drawTextOnPath(绘制文本)

/**
 * 绘制文本  (第一种方法)
 *
 * @param text String,绘制的文本内容
 * @param x float 正在绘制的文本原点的X坐标
 * @param y float 正在绘制的文本原点的Y坐标
 * @param paint 画笔对象
 */
canvas.drawText("绘制文本内容", 100, 100, redPaint);

/**
 * 绘制文本  (第二种方法)
 *
 * @param text String,绘制的文本内容
 * @param start int 要从第几个字开始绘制
 * @param end int 要绘制到第几个文字
 * @param x float 正在绘制的文本原点的X坐标
 * @param y float 正在绘制的文本原点的Y坐标
 * @param paint 画笔对象
 */
canvas.drawText("绘制文本内容", 2,4,100, 100, redPaint);

/**
 * 绘制文本  (第三种方法)
 *
 * @param chars String,绘制的文本内容
 * @param index int 要从第几个字开始绘制
 * @param end int 要绘制文字的数量
 * @param x int 正在绘制的文本原点的X坐标
 * @param y int 正在绘制的文本原点的Y坐标
 * @param paint 画笔对象
 */
canvas.drawText(new char[]{'绘', '制', '文', '本', '内', '容'}, 2, 4, 100, 100, redPaint);

/**
 * 绘制文本  (第四种方法)
 *
 * @param text CharSequence 绘制的文本内容
 * @param start int 要从第几个字开始绘制
 * @param end int 要绘制到第几个文字
 * @param x float 正在绘制的文本原点的X坐标
 * @param y float 正在绘制的文本原点的Y坐标
 * @param paint 画笔对象
 */
canvas.drawText("绘制文本内容", 2,4,100, 100, redPaint);

/**
 * 根据路径去绘制文本
 *
 * @param text String 绘制的文本内容
 * @param path 路径
 * @param hOffset float 距离路径开始位置的偏移量
 * @param vOffset float 距离路径上下的偏移量(可以为负数)
 * @param paint 画笔对象
 */
canvas.drawTextOnPath("绘制文本内容", path, 10, -50, redPaint);

/**
 * 根据路径去绘制文本
 *
 * @param text char[] 绘制的文本内容
 * @param index int 要从第几个字开始绘制
 * @param end int 要绘制文字的数量            
 * @param path 路径
 * @param hOffset float 距离路径开始位置的偏移量
 * @param vOffset float 距离路径上下的偏移量(可以为负数)
 * @param paint 画笔对象
 */
canvas.drawTextOnPath(new char[]{'绘', '制', '文', '本', '内', '容'}, 2, 4, path,10, -50, redPaint);

        下面看下根据路径绘制文本的效果:
这里写图片描述

8、drawBitmap(绘制位图)

/**
 * 绘制位图  (第一种方法)
 *
 * @param bitmap 要绘制的位图
 * @param left 绘制位图左侧的位置
 * @param top 绘制位图顶部的位置
 * @param paint 画笔对象 可以为null
 */
canvas.drawBitmap(bitmap, 100, 100, null);

/**
 * 绘制位图  (第二种方法)
 *
 * @param bitmap 要绘制的位图
 * @param src Rect 对当前图片进行裁剪,根据图片绘制的区域
 * @param dst Rect 对图片的大小进行缩放和移动,根据画布绘制显示的区域
 * @param paint 画笔对象 可以为null
 */
canvas.drawBitmap(bitmap, new Rect(100, 100, bitmap.getWidth(), bitmap.getHeight()),new Rect(100, 100, bitmap.getWidth(), bitmap.getHeight()), null);

/**
 * 绘制位图  (第三种方法)
 *
 * @param bitmap 要绘制的位图
 * @param src Rect 对当前图片进行裁剪,根据图片绘制的区域
 * @param dst RectF 对图片的大小进行缩放和移动,根据画布绘制显示的区域
 * @param paint 画笔对象 可以为null
 */
canvas.drawBitmap(bitmap, new Rect(100, 100, bitmap.getWidth(), bitmap.getHeight()),new RectF(100, 100, bitmap.getWidth(), bitmap.getHeight()), null);

/**
 * 绘制位图  (第四种方法)
 *
 * @param bitmap 要绘制的位图
 * @param matrix Rect 用于在绘制位图时变换位图的矩阵
 * @param paint 画笔对象 可以为null
 */
canvas.drawBitmap(bitmap, new Matrix(), null);

        下面我们看下第二种方法实现的效果:
这里写图片描述

9、drawPath(绘制路径)

/**
 * 绘制路径
 * 
 * @param path 要绘制的路径
 * @param paint 画笔对象            
 */
canvas.drawPath(path, redPaint);

        使用Path不仅能够绘制简单图形,也可以绘制这些比较复杂的图形。另外,根据路径绘制文本和剪裁画布都会用到Path。

三、画布快照和回滚

1、SaveFlags

数据类型名称简介
intALL_SAVE_FLAG默认,保存全部状态
intCLIP_SAVE_FLAG保存剪辑区
intCLIP_TO_LAYER_SAVE_FLAG剪裁区作为图层保存
intFULL_COLOR_LAYER_SAVE_FLAG保存图层的全部色彩通道
intHAS_ALPHA_LAYER_SAVE_FLAG保存图层的alpha(不透明度)通道
intMATRIX_SAVE_FLAG保存Matrix信息(translate, rotate, scale, skew)

2、Save

        把当前的画布的状态进行保存,然后放入特定的栈中。

// 保存全部状态
public int save ()

// 根据saveFlags参数保存一部分状态
public int save (int saveFlags)

3.saveLayerXxx

        save()方法保存的是整个Canvas,而saveLayer()则可以选择性的保存某个区域的状态。

// 无图层alpha(不透明度)通道
public int saveLayer (RectF bounds, Paint paint)
public int saveLayer (RectF bounds, Paint paint, int saveFlags)
public int saveLayer (float left, float top, float right, float bottom, Paint paint)
public int saveLayer (float left, float top, float right, float bottom, Paint paint, int saveFlags)

// 有图层alpha(不透明度)通道
public int saveLayerAlpha (RectF bounds, int alpha)
public int saveLayerAlpha (RectF bounds, int alpha, int saveFlags)
public int saveLayerAlpha (float left, float top, float right, float bottom, int alpha)
public int saveLayerAlpha (float left, float top, float right, float bottom, int alpha, int saveFlags)

4、restore

        状态回滚:用save 方法保存后,从栈顶取出一个状态然后根据内容进行恢复,也就是说将Canvas还原成最近的一个save() 的状态。

5、restoreToCount

        save()方法还会有一个返回值,我们也可以调用restoreToCount(int saveCount)方法,将这个返回值作为参数传递进去,就可以将Canvas还原成某一个特定的save()状态。

canvas.translate(100,100); // 平移(100,100)
int save1 = canvas.save(); // 保存Canvas状态(状态1)
canvas.scale(2, 2); // 放大2倍
int save2 = canvas.save(); // 保存Canvas状态(状态2)
canvas.restore(); // 返回最新的save状态,即状态2
canvas.restoreToCount(save1);// 手动指定的返回到 状态1

6、getSaveCount

        获取保存的次数,即状态栈中保存状态的数量。

四、画布裁剪

clipPath, clipRect

/**
 * 绘制路径
 *
 * @param path 要绘制的路径
 * @param paint 画笔对象
 */
canvas.drawPath(path, redPaint);//画出贝塞尔曲线

/**
 * 画布裁剪
 *
 * @param RectF 与当前裁剪相交的矩形
 */
canvas.clipRect(rectF);

/**
 * 画布裁剪
 *
 * @param Rect 与当前裁剪相交的矩形
 */
canvas.clipRect(rect);

/**
 * 画布裁剪
 *
 * @param left float 裁剪矩形左边的X坐标
 * @param top float 裁剪矩形顶部的Y坐标
 * @param right float 裁剪矩形右侧的X坐标
 * @param bottom float 裁剪矩形底部的Y坐标
 */
canvas.clipRect(0,0,300,300);

/**
 * 画布裁剪
 *
 * @param left int 裁剪矩形左边的X坐标
 * @param top int 裁剪矩形顶部的Y坐标
 * @param right int 裁剪矩形右侧的X坐标
 * @param bottom int 裁剪矩形底部的Y坐标
 */
canvas.clipRect(0,0,300,300);

/**
 * 画布裁剪
 *
 * @param path 裁剪Path包括的范围,Path所包括的范围不是空的才有效
 */
canvas.clipPath(path);
Android 中 Canvas的功能 Android 中 Canvas的功能 一. 如何在一屏幕上绘图 三个概念: 需要有画布Canvas 需要有笔Paint 需要有坐标系,画笔默认是在左上角(0,0)位置绘制的。我们可以通过移动画布坐标原点的形式,实现在不同位置绘制。 1. 移动坐标原点 简单绘制一个图 我们将画笔Canvas.translate(100,400)移动之后再进行绘制,这时画布的原点已经变化了。 2. 视图坐标系 理论上 Canvas 这张纸是没有边界的,但是我们的手机屏幕是有界的。我们可以理解为我们透 阅读详情

相关推荐

事件相机(Event Camera)及相关研究简介——新一代相机?新的计算机视觉领域?

事件相机(Event Camera)及相关研究简介 事件相机是一个新型的类脑相机,是一个待开发的大领域。希望通过我的分享,能够有更多人来研究并将它更好地运用在我们的生活中~

Cyril的博客 5万+

Android canvas

1.Canvas Canvas是一个画布,可以在这个画布上进行各种绘图操作。 在Android中,想要获得一个Canvas对象主要有三种方法: ①继承一个View,并重写onDraw()方法。View的Canvas对象会被当做参数传递过来,在这个Canvas上进行的操作会直接反映在View中。 ②调用SurfaceHolder.lockCanvas()返回一个Canvas对象。 ③通过构造方法自己创建一个Canvas对象。 Bitmap bitmap = Bitmap.createBitmap(1

zenmela2011的专栏 1万+

C# 进程间 双内存共享 高帧率图像传输

演示了两个进程之间通过 双内存共享 的方式, 来实时处理图像,并以高帧率(40~60FPS)传输的基本示例。 进程间内存共享的优点:高性能、低延迟、资源效率高、简单可靠。 适用场景:实时图像处理、大数据传输、多进程协作、实时监控系统,等等。

qianqiansd 1996

HenCoder Android 开发进阶: 自定义 View 1-1 绘制基础

从今天开始,HenCoder 就正式开讲知识技能了。按照我的计划,第一季是 UI,UI 一共分为三部分:绘制、布局和触摸反馈。本期是绘制部分的第一期。绘制大概会用 5~6 期的时间讲完,整个 UI 的绘制、布局和触摸反馈三部分大概会用十来期。更新频率大约为每周一更(不承诺哟)。 如果你不知道 HenCoder 是什么,可以先看这里: HenCoder:给高级 Android 工程师的进阶手册 自定...

weixin_33911824的博客 546

一个基于ZYNQ、AXI接口的PL端卷积加速器,可由PS端调用(附Github源码)

一个基于ZYNQ,AXI接口的PL端卷积加速器,可由PS端调用开发板型号:Zynq-7000 SoC XC7Z305 FPGA开发平台:Vivado 2019.1;Github源码链接:https://github.com/CY0807/ZYNQ_PL_CONV_ACC。

跳跳骑士的博客 1305

高精度计算Π的值(C语言)

题目要求 限制使用双向链表作存储结构,请根据用户输入的一个整数(该整数表示精确到小数点后的位数,可能要求精确到小数点后500位),高精度计算PI值。可以利用反三角函数幂级展开式来进行计算。 输入5 输出3.14159 思路分析 反三角函数幂级展开式 由公式可以看出,只要计算出来每一个R(n)的值再相加取二倍就可以得到Π的值。 经过推算,要是令R(1)=2,只需要将每个R(n),相加即可。 因...

weixin_46251155的博客 8031

Android中Canvas绘图基础详解(附源码下载)

Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API。Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形。Canvas绘图有三个基本要素:Canvas、绘图坐标系以及Paint。Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要传入要绘制的图形的

孙群 4万+

python 抖音采集_python爬取抖音视频的实例详解

import requestsimport jsonimport reimport osfrom pprint import pprint as ppimport queueclass DouYin:header = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*...

weixin_35795675的博客 1864

Android Canvas绘图描述Android Canvas 方法总结

Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0。今天我们主要要了解的是2D相关的,如果你想看3D的话那么可以跳过这篇文章。 大部分2D使用的api都在android.graphics和android.graphics.drawable包中。他们提供了图形处理相关的: Canvas、ColorFilter、Point(点)和...

达帮主 3万+

ArcGIS栅格拼接全攻略:从核心原理到色彩平衡与大数据处理

在GIS数据处理中,栅格拼接是一项基础且关键的操作,其本质是将多幅具有重叠区域的栅格图像无缝整合为一张完整地图。该技术涉及空间参考统一、像元对齐与色彩融合等核心原理,是构建连续地理空间数据的基石。其技术价值在于保障数据完整性、提升可视化效果,并为后续的空间分析提供可靠底图。在遥感影像处理、数字高程模型构建及地图制图等应用场景中,高质量的拼接成果至关重要。本文聚焦于ArcGIS平台,深入解析其栅格拼接工具,并针对常见的色彩不一致与大数据量处理难题,提供了基于**色彩平衡**和**金字塔**优化的实战解决方案,

weixin_33158887的博客 261

基于遗传算法改进BP神经网络的电池容量SOC预测

,遗传算法BP神经网络能很好的实现对电池容量soc的训练和预测,BP神经网络是一种成熟的神经,相对于其他神经网络,拥有很多的训练函数,传递函数,可以调节的参数非常多,对各种问题都可以达到一个比较理想的效果,关键看如何调试参数,选择训练传递函数,遗传算法改进BP神经网络的初始权值阈值,达到改进BP神经网络的目的,从而更好的实现对电池容量SOC的预测

abc991835105的博客 765

Android中Canvas方法总结

Android中最重要的一个类当属Canvas了,所有View在UI上绘制全部是由Canvas实现的。而在使用SurfaceView的时候,对Canvas的使用就更重要了。     这里简单介绍下Canvas中常用的方法:       一. save(),restore()

liujianminghero的专栏 6486

科研必备:15款顶尖AI科研工具全面分析汇总(持续更新ing)

科研必备:15款AI科研工具全面分析汇总(持续更新ing)

Code_流苏:在代码中寻诗意,在实践中觅真知 9633

Android Canvas 方法总结

对Canvas进行操作对Canvas的一系列操作,是指对Canvas进行旋转、平移、缩放等操作。这些操作可以让Canvas对象使用起来更加便捷。

2501_90242435的博客 563

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android canvas 异步_Android Canvas 方法总结

简介在自定义 View的时候,我们经常需要绘制一些自己想要的效果。这里就需要使用Canvas对象。下面将Canvas对象常用方法做个笔记,方便记忆。对Canvas进行操作对Canvas的一系列操作,是指对Canvas进行旋转、平移、缩放等操作。这些操作可以让Canvas对象使用起来更加便捷。Canvas平移/*** 画布向(100,50)方向平移** 参数1: 向X轴方向移动100距离* 参数2:...

weixin_29457191的博客 358

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android canvas 异步_Android Canvas 方法总结(五)

画点:/*** 参数1、2:点的x、y坐标*/drawPoint(float x, float y, @NonNull Paint paint) ;//画一个点/***pts:多个点,每两个值为一个点。最后个数不够两个的值,忽略。*/drawPoints(@Size(multiple = 2) @NonNull float[] pts, @NonNull Paint paint)//画多个点画线/...

weixin_34275305的博客 250

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android canvas 异步_Android Canvas drawArc方法介绍

public void drawArc(RectF oval, float startAngle, float sweepAngle,boolean useCenter, Paint paint)oval :指定圆弧的外轮廓矩形区域。startAngle: 圆弧起始角度,单位为度。sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度。useCenter: 如果为True时,在绘制圆弧时将圆...

weixin_39654436的博客 263

Android canvas绘制方法

canvas绘制分为如下几类: 1、几何图形绘制 2、文本绘制 3、颜色绘制 4、图片绘制 一、几何图形绘制 1. drawLine 简单的绘制一条线 canvas.drawLine(startX, startY, endX, endY, paint) 2. drawLines 如果你想要绘制多条线,相比于多次执行drawLine,我们推荐使用drawLines来完成,我们只需要提供一个坐标值的平面float数组列表,如下所示。 canvas.drawLines(...

zenmela2011的专栏 2963

安卓中Canvas使用方法

更多技术内容请移步:我的个人博客一、前言今天是周日,昨天刚刚写完了一篇关于如何搭建LNMP环境,让自己可以DIY有个性的个人主页:http://blog.youkuaiyun.com/jiangwei0910410003/article/details/50929955那么今天,我们继续来看一篇关于Android中的UI篇,如何自定义视图View的进阶篇,关于前奏篇之前已经写过了,还没有了解的同学可以去看看:h

liujian8654562的博客 1522

android中的draw 方法,Android 中View.onDraw(Canvas canvas)的使用方法

Android 中View.onDraw(Canvas canvas)的使用方法View通过View.onDraw(Canvas canvas)来Draw.我们可以定义自己的继承于View的TestView,然后重载View.onDraw(Canvas canvas).对于自定义的TestView如何与Activity关联?有以下两种方式:直接在setContentView(View view)里...

weixin_34355348的博客 533

Android中Canvas绘图方法的实现

Android中2D图形可以使用Canvas来实现,我们可以通过重写View.onDraw()方法来实现Canvas对象。 常用方法 drawBitmap() 绘制位图 drawCircle() 绘制圆形 drawColor() 绘制填充画布颜色 drawLine() 绘制

弱弱的小雨鸟 4599

android canvas常用的方法解析(一)

android canvas常用的方法解析

zhouguizhi 9361

Android Canvas的常用方法

Android、Canvas、绘图、Paint

Main_Stage的专栏 1796
上一篇: Android事件分发机制个人总结
下一篇: Android 画板(简单的自定义控件)
谦行
博客等级 码龄11年 182粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值