首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何防止onDraw的画图影响ArrayList<Rect>中的所有矩形?

要防止onDraw的画图影响ArrayList<Rect>中的所有矩形,可以采取以下步骤:

  1. 在onDraw方法中,遍历ArrayList<Rect>中的每个矩形,并将其复制到一个新的ArrayList<Rect>中。这样做是为了避免直接修改原始ArrayList<Rect>中的矩形。
  2. 在绘制矩形之前,先将新的ArrayList<Rect>中的矩形进行绘制。这样可以确保绘制的矩形不会受到onDraw方法中其他绘制操作的影响。

以下是示例代码:

代码语言:txt
复制
// 定义一个新的ArrayList<Rect>用于存储复制后的矩形
ArrayList<Rect> copiedRects = new ArrayList<>();

// 在onDraw方法中进行遍历并复制矩形
for (Rect rect : originalRects) {
    // 复制矩形并添加到新的ArrayList<Rect>中
    copiedRects.add(new Rect(rect));
}

// 在绘制矩形之前,先绘制新的ArrayList<Rect>中的矩形
for (Rect rect : copiedRects) {
    canvas.drawRect(rect, paint);
}

这样做的好处是,即使在绘制矩形的过程中对原始ArrayList<Rect>进行了修改,也不会影响到绘制的结果。同时,通过复制矩形到新的ArrayList<Rect>中,确保了绘制的矩形不会受到其他绘制操作的影响。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):提供灵活可扩展的云服务器实例,适用于各种应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库MySQL版:提供高性能、可扩展的云数据库服务,适用于各种规模的应用。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云对象存储(COS):提供安全可靠的云端存储服务,适用于存储和处理各种类型的数据。详情请参考:https://cloud.tencent.com/product/cos

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android自定义控件:一款多特效智能loadingView

1、【画圆角矩形画图首先是onDraw方法(我会把圆代码写上,一步一步剖析): 首先在view定义个属性:private RectF rectf = new RectF();//可以理解为,装载控件按钮区域...所以自定义控件因为你需要什么样功能可以自己去实现(当然这个方法也是在onDraw里,为什么这么个顺序讲,目的希望我希望你能循序渐进理解,如果你觉得onDraw方代码太杂,你可以用个方法独立出去,你可以跟作者一样用...).with(animator_rect_to_angle); 6.2、变成圆形后,有一个loading加载动画 这里就是画圆弧,只是不断改变,圆弧起始点和终点,最终呈现loading状态,也是在onDraw...); } 6.4、loading状态下回到失败样子(有点类似联网失败了) 之前6.1提到了矩形到圆角矩形矩形到正方形动画, 那么这里只是前面2个动画反过来,再加上联网失败文案,和联网失败背景图即刻...,里面还涉及到了一个自定义view CirclBigView,这个控件是全屏,而且是从一个小圆不断改变半径变成大圆动画,那么有人会问,全屏肯定不好啊,会影响布局, 但是这里,我把它放在了activity

61040

Android自定义控件:一款多特效智能loadingView

画图首先是onDraw方法(我会把圆代码写上,一步一步剖析): 首先在view定义个属性:private RectF rectf = new RectF();//可以理解为,装载控件按钮区域 rectf.left...所以自定义控件因为你需要什么样功能可以自己去实现(当然这个方法也是在onDraw里,为什么这么个顺序讲,目的希望我希望你能循序渐进理解,如果你觉得onDraw方代码太杂,你可以用个方法独立出去,你可以跟作者一样用...).with(animator_rect_to_angle); 6.2、变成圆形后,有一个loading加载动画 这里就是画圆弧,只是不断改变,圆弧起始点和终点,最终呈现loading状态,也是在onDraw...); } 6.4、loading状态下回到失败样子(有点类似联网失败了) 之前6.1提到了矩形到圆角矩形矩形到正方形动画,那么这里只是前面2个动画反过来,再加上联网失败文案,和联网失败背景图即刻...,里面还涉及到了一个自定义view CirclBigView,这个控件是全屏,而且是从一个小圆不断改变半径变成大圆动画,那么有人会问,全屏肯定不好啊,会影响布局,但是这里,我把它放在了activity

68500
  • 图像处理程序框架—MFC相关知识点

    BOOL DrawEdge(LPRECT lpRect,UINT nEdge,UINT nFlags); 参数lpRect指向矩形RECT结构指针;nEdge指定矩形内外边界风格,必须是一个内边界标志和外边界标志组合...,取值为: BF_RECT矩形所有四边; BF_LEFT:矩形左边; BF_BOTTOM:矩形底边; BF_RIGHT:矩形右边; BF_TOP:矩形上边; BF_TOPLEFT:矩形上边和左边...为了简化操作,MFC框架把大部分绘制操作都放在OnDraw,OnPaint和OnPrint只构造相应DC,然后分别调用OnDraw.也就是说,OnDraw适用于所有的设备,而OnPaint只适用于屏幕...因此我们一般用OnPaint维护窗口客户区(例如我们窗口客户区加一个背景图片),用OnDraw维护视图客户区(例如我们通过鼠标在视图中画图)。...应用程序几乎所有的绘图都在视图 OnDraw 成员函数中发生,必须在视图类重写该成员函数。(鼠标绘图是个特例,这在通过视图解释用户输入讨论。)

    1.4K20

    Carson带你学Android:自定义View Canvas类使用教程

    、思路不清晰、简单问题复杂化等等 今天,我将全面总结自定义ViewCanvas类使用,我能保证这是市面上最全面、最清晰、最易懂 目录 1....里内容绘制到Canvas Picture.draw (Canvas canvas) // 还有两种方法可以将Picture里内容绘制到Canvas // 方法2:Canvas.drawPicture...() // 在复写onDraw()里 @Override protected void onDraw(Canvas canvas){ super.onDraw(canvas...src, Rect dst, Paint paint) // 参数(src,dst) = 两个矩形区域 // Rect src:指定需要绘制图片区域(即要绘制图片哪一部分) // Rect dst...: Path类最全面详解 - 自定义View应用系列 4.2.6 画布操作 作用:改变画布性质 改变之后,任何后续操作都会受到影响 A.

    2.3K10

    Android CameraX NDK OpenCV(三)-- 人脸贴图替换

    按钮事件写实现方式,上面定义itype类型,每点击一次就+1然后再除List集合数取余,这样就实现了点击循环方式,showtvStatus就是让文本显示出当前状态。 ?...上面的分析处理,把原来if else改为了when写法,处理流程比较简单,还是用的人脸检测,返回矩形,只不过在画矩形时不能再调用原来人脸检测那个红框了,需要改为指定位置画图方式。...= null 在ViewOverlay中加入了专门为人脸贴图定义几个变量,mFaceBitmap直接加载资源里面的png图片,mFaceRect矩形也是直接获取加载后mFaceBitmap矩形大小...,定义这两个主要为了drawBitmap函数用到。...onDraw事件里针对每个一Rect矩形,我们都在原矩形基础上再扩大10,所以除了位置偏移后再对每个点做了一个10固定偏移,最后用drawBitmap画出图像就实现了贴图效果。 ?

    1.2K10

    Android自定义View实现可展开、会呼吸按钮

    1、按照国际惯例,就是新建attrs,写各种需要属性,然后获取,新建各种所需Paint、Rect,重写onMeasure计算宽高,重写onDraw画图搞起。。...2、关于可展开效果,其实就是点击发布时,启动一个ValueAnimator,对一个圆角矩形左边距离不断改变: int mBackgroundRectFLeft; RectF mBackgroundRectF...canvas.drawCircle(mInnerCircleCenterX, mInnerCircleCenterY, mBreatheRadius, mBreathePaint);//呼吸圈 4、关于文字位置居中计算,以前我用一个Rect...,因为这个控件不是一直都是展开状态,那么就要求控件在闭合时候,要不影响该控件下层控件对点击处理。...return false; } break; } } 然后在up事件中计算点击了发布按钮还是展开item,就是计算点击坐标是在圆半径内,还是在item矩形范围内。

    1.1K31

    安卓日历_公认不卡安卓手机

    一月数据: List date = new ArrayList(); int j = 1; for (int i = 0; i < 42; i++) { if (i <...需要绘制公历、农历、小圆点、选中圆环包括后面的点击操作,这些元素确定位置都需要一个矩形(Rect),那么就可以先在这个View里面绘制42个矩形。...四个点确定一个矩形,可以在纸上画一下大致图案,大致画个一两行矩形,应该就找到规律了,感觉有点像以前上学时做找规律数学题。...6行7列一个矩形阵 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas);...); 我们需要在绘制循环里面要判断这些内容: 1、是不是本月数据(用颜色区分本月和其他月数据) 2、是不是今天 3、有没有选中日期 4、显示不显示农历 其中今天和选中日期用圆环表示,就需要在当天和选中日期矩形绘制圆环

    4.9K30

    Android-2D绘图

    save之后,可以调用Canvas平移、放缩、旋转、错切、裁剪等操作。 restore:用来恢复Canvas之前保存状态。防止save后对Canvas执行操作对后续绘制有影响。...由于设置了画笔为红色,因此直线和矩形均为红色。这段代码同时也演示了Android绘图操作流程,一般是通过重载View类onDraw方法来实现。...也可以直接使用系统Color类定义颜色。读者可以参阅Paint类setColor方法。 【实例演示】下面通过代码来演示如何设置画布背景颜色。...---- drawRect方法:绘制矩形 【功能说明】该方法用于在画布上绘制矩形,可以通过指定矩形四条边来实现,也可以通过指定Rect对象来实现。同时也可以通过设置画笔空心效果来绘制空心矩形。...rect:RectF对象。 left:矩形左边位置。 top:矩形上边位置。 right:矩形右边位置。 bottom:矩形下边位置。 paint:绘制时所使用画笔。

    5.1K20

    教你玩转 Android RecyclerView:深入解析 RecyclerView.ItemDecoration类(含实例讲解)

    ---- 2.1 getItemOffsets() 2.1.1 作用 设置ItemView内嵌偏移长度(inset) 如图,其实RecyclerView ItemView 外面会包裹着一个矩形(...内嵌偏移长度分为4个方向:上、下、左、右,并由outRect top、left、right、bottom参数 控制 top、left、right、bottom参数默认 = 0,即矩形和Item...把每个ItemView所有 ItemDecoration getItemOffsets 设置值累加起来,(每个ItemView可添加多个ItemDecoration) // 即把每个ItemDecoration...onDraw()绘制会先于ItemViewonDraw()绘制,所以如果在ItemdecorationonDraw()绘制内容在ItemView边界内,就会被ItemView遮挡住。...= 10 px 设置好onDraw()可绘制区域 通过onDraw()绘制一个高度 = 10px矩形(填充颜色=红色) ?

    1.9K21

    Android画布Canvas--区域Region

    Canvas类有很多画图方法,除了常用图形外,安卓还提供了Region--区域,表示Canvas图层上一块封闭区域,可以用于将两个或多个图形做结合,还可以利用contains方法判断坐标、Rect...,画Region需要使用区域迭代器,它可以将Region区域划分成很多矩形 /** * 演示RegionView */ public class RegionView extends View {...mPaint.setColor(Color.RED); mPaint.setStyle(Paint.Style.FILL); } @Override protected void onDraw...); //将圆形和正方形区域结合 region.setPath(path,region); //结合区域迭代器使用(得到图形里面的所有矩形区域)...可以发现一个个矩形,Region用于复杂图形实现,需要用到图形和图形叠加,还提供了op()方法 /** * Perform the specified Op on this region

    1.9K10

    Android CameraX NDK OpenCV(二)-- 实现Dnn人脸检测

    GIF动图 视频效果 划重点 从上面的效果很仔细的话可以看到,我们检测人脸到画上红色矩形框时偶尔会有延时情况,这个在《Android JetPack组件CameraX使用及修改显示图像》说过,我们在摄像机预览中上层加入了...这次改造了一下代码,把所有JNI调用都放入一个类,加入了initFaceDetector初始化人脸检测和facedetector的人脸检测。...dsts.push_back(rect); //在原图上用红框画出矩形 rectangle(frame, rect, Scalar(0, 0, 255)...在ViewOverLay类中加入一个DrawRect方法,因为在JNI返回是人脸检测到矩形,所以这里加入一个画矩形函数,后面两个参数宽度和高度在上一篇灰度显示中提到过,我们传入图片大小和预览图片大小不一致...然后在OnDraw函数针对矩形四个点进行比例偏移。 03 调用相关代码 ? 程序启动时加入复制文件及初始化DNN模型文件调用 ?

    1.7K40

    Carson带你学Android:自定义View Path类使用教程

    基础 2.1 开放路径与闭合路径区别 2.2 如何判断点在图形内还是图形外 判断方法分为奇偶规则 & 非零环绕规则,具体介绍如下: 举例说明1:(奇偶规则) 由上图知: p1发出射线与图形相交.../ 特别注意:建全局Path对象,在onDraw()按需修改;尽量不要在onDraw()方法里new对象 // 原因:若View频繁刷新,就会频繁创建对象,拖慢刷新速度。...dir) // 加入矩形路径 // 路径起点变为矩形左上角顶点 addRect(RectF rect, Path.Direction dir) //加入圆角矩形路径...// 如果是一个矩形的话,会将矩形信息存放进参数rect。...(rect); // b返回ture, // rect存放矩形参数,具体如下: // rect.left = 0 // rect.top = 0

    67820

    自定义View学习——仿QQ消息气泡拖拽黏连删除

    该篇主要是对MessageBubbleView仿QQ消息控件修改。因为我发现这个QQ消息气泡开源控件是规则圆,所以稍加修改,对onDraw()绘画图形做了变动,更加接近于QQ气泡了。...参考博客:仿 QQ 未读消息气泡,可拖拽删除,粘连效果 参考博客实现思路: 首先我们需要两个圆,一个是在原点不需要跟随手指圆,一个是跟随手指圆,当用户开始点击时,绘制跟随手指圆和圆上未读消息数量...注意:使用时需要在所有父布局中加入android:clipChildren="false"属性,使气泡可以在父布局拖动。...bitmapRect; /** * 消失动画播放图片index */ int bitmapIndex; /** * 判断是否正在播放消失动画,防止死循环重复绘制...贝塞尔辅助图.png 其中主要是对绘制onDraw()内做了修改,将圆替换成圆角矩形。加了判断当当前内容宽度小于设置直径时画圆显示,当内容宽度大于等于直径时显示圆角矩形

    1.5K30

    【RecyclerView】 六、RecyclerView.ItemDecoration 条目装饰 ( 简介 | onDraw | onDrawOver | getItemOffsets )

    () 方法 onDraw方法 : 在提供给 RecyclerView 画布上绘制合适装饰 , 在该方法绘制任何内容, 都在 item 布局组件绘制之前绘制, 绘制内容都被 item 布局覆盖...@NonNull State state) 参数说明 : ① @NonNull Rect outRect : 接受输出矩形 ; ② @NonNull View view : 要装饰子 View ;...outRect 所有的 4 个字段值为 0 ; * * * 如果需要取访问 Adapter 适配器关联数据 , 调用 RecyclerView.getChildAdapterPosition...(View) * 方法获取适配器该 View 组件位置 ; * * @param outRect 接受输出矩形...(View) * 方法获取适配器该 View 组件位置 ; * * @param outRect 接受输出矩形

    56700

    Android精确测量文本宽高及基线位置方法

    通过 Paint getTextBounds 获取文本边界矩形 Rect,根据 Rect 可以计算出文字宽高。 方案4....通过 Paint 获取文字 Path, 根据 Path 获取文本边界矩形 Rect, 根据 Rect 可以计算出文字宽高。 表面上看,我们有以上四种方案可以获取文字宽或高。...与测量文字高度类似,我们如何获取文字基线 baseline 位置。 ? 一般博客上会告诉我们,如果需要计算文字基线 baseline 位置,可以通过 FontMetrics 来计算。...我们可以看下面的例子: 在自定义 View onDraw 方法,绘制一个字符 “e”, 绘制y坐标为 baseline,所以文字应该会顶着 Activity 边界。...代码如下: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); String str = "e"; Rect

    1.3K21
    领券