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

如何在自定义ImageView安卓上清除之前绘制的画布?

在自定义ImageView上清除之前绘制的画布,可以通过以下步骤实现:

  1. 创建一个自定义的ImageView类,并继承自android.widget.ImageView。
  2. 在该类中重写onDraw()方法,该方法用于绘制自定义的图像。
  3. 在onDraw()方法中,首先调用super.onDraw(canvas)来绘制ImageView的默认内容。
  4. 创建一个新的Bitmap对象,作为清除之前绘制的画布的临时存储区域。
  5. 创建一个新的Canvas对象,将该Bitmap对象作为参数传入。
  6. 使用新的Canvas对象绘制需要显示的内容,可以是新的图像或者其他绘制操作。
  7. 调用canvas.drawBitmap()方法,将新的Bitmap对象绘制到ImageView上。
  8. 释放临时的Bitmap对象和Canvas对象,以释放内存资源。

以下是一个示例代码:

代码语言:txt
复制
public class CustomImageView extends ImageView {
    private Bitmap mBitmap;
    private Canvas mCanvas;

    public CustomImageView(Context context) {
        super(context);
    }

    public CustomImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (mBitmap == null) {
            mBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
            mCanvas = new Canvas(mBitmap);
        }

        // 清除之前绘制的画布
        mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

        // 在新的画布上绘制需要显示的内容
        // ...

        // 将新的Bitmap对象绘制到ImageView上
        canvas.drawBitmap(mBitmap, 0, 0, null);
    }
}

在这个示例中,我们创建了一个新的Bitmap对象和Canvas对象,用于绘制新的内容。在onDraw()方法中,我们首先调用super.onDraw(canvas)来绘制ImageView的默认内容,然后使用mCanvas.drawColor()方法清除之前绘制的画布,接着在新的画布上绘制需要显示的内容,最后调用canvas.drawBitmap()方法将新的Bitmap对象绘制到ImageView上。

这样,就可以在自定义ImageView上清除之前绘制的画布,并绘制新的内容。

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

相关·内容

【Android 性能优化】布局渲染优化 ( 过渡绘制 | 背景设置产生过度绘制 | Android 系统渲染优化 | 自定义布局渲染优化 )

组件背景设置策略 : 不要随便为组件添加背景 , 添加一次背景 , 就增加一次 GPU 绘制 ; 不要随意给布局中 UI 组件设置背景 , 能不设置背景就不设置背景 , ImageView 组件..., 设置一张图片 , 会增加一次绘制 , 如果再给该 ImageView 组件设置背景颜色 , 那么又会增加一次绘制 , 那么该 ImageView 组件肯定过渡绘制了 ; 二、 Android 系统渲染优化...---- 在 【Android 性能优化】布局渲染优化 ( CPU 与 GPU 架构分析 | 布局显示流程 | 视觉与帧率分析 | 渲染超时卡顿分析 | 渲染过程与优化 ) 博客中分析了图像渲染...自定义组件过度绘制问题描述 : 自定义控件 , 在自定义 onDraw 方法中 , 绘制多张图片 , 如果图片之间产生重叠 , 重叠绘制部分就出现了过度绘制 ; 2....实现上述图片 A 在 Canvas 画布绘制部分图片方式 : ① 完整画布 : onDraw 函数中 Canvas canvas 参数是完整画布 ; ② 取出图片 A 绘制部分 Canvas

4.6K30

一种android中实现“圆角矩形”方法

思路是利用“Xfermode + Path”来进行Bitmap裁剪。 背景 圆角矩形实现方法应该很多,网上一大堆。很怀疑为啥控件不内置这样属性(我不知道有)?...下面采取自定义ImageView子类形式提供案例来说明“Xfermode + Path”实现圆角矩形思路。...理解,就像你拿着剪刀沿着圆环路径裁剪画纸就可以裁剪出一个圆型画纸一样。 Canvas类一些API是直接绘制内容操作,另一些是针对canvas(画布)本身做设置。...clip**系列方法就是对画布进行裁剪,之后绘制(“可以简单地”认为之前通过canvas绘制已经固定在画布对应存储图像bitmap上了)都在裁剪后区域中进行 使用clipPath()实现圆角矩形完整代码如下...这里不严谨认为:每个layer是一个canvas(画布),画布关联一个Bitmap存储最终绘制内容。实际不像现实中画布或画纸,Canvas更像一个“绘图工具集”,包含直尺,圆规等绘图工具。

3.5K70
  • Android--vector动画

    上次说了SVG在应用,在我们系统中SVG就是Vector Drawable,Vector除了显示SVG图片外,还可以做动画效果,效果如下: 首先我们需要一张vector图片 在xml中为如下...注:当strokeLineJoin设置为 “miter” 时候, 绘制两条线段以锐角相交时候,所得斜面可能相当长。当斜面太长,就会变得不协调。...系统支持尺寸,通常使用 dp android:viewportWidth 定义矢量图视图宽度,视图就是矢量图 path 路径数据所绘制虚拟画布 android:viewportHeight...定义矢量图视图高度,视图就是矢量图 path 路径数据所绘制虚拟画布 android:tint 定义该 drawable tint 颜色。...animated-vector需要一个drawable,就是我们静态vector图片,target标签中需要指定一个执行动画对象name,对应我们之前在静态图片中定义name,再创建一个动画 ic_check_animation.xml

    1.3K30

    开发-车机应用实现仪表盘高级UI

    引言在车机应用开发中,本文介绍如何在平台上实现一个自定义仪表盘视图,包括设计、实现和集成协议数据(不提供code)。...仪表盘视图通过自定义View实现,图形处理和动画效果。技术实现 自定义仪表盘CustomSpeedometerView继承自View类,负责绘制仪表盘背景和指针。...资源初始化:在initResources方法中,加载仪表盘背景和指针图像,根据屏幕尺寸进行缩放。图形缩放:scaleBitmap方法用于根据给定缩放比例调整位图大小。...绘制逻辑:onDraw方法在画布绘制背景和指针。指针旋转角度根据当前速度值动态计算。动态更新:setCurrentValue方法用于更新指针的当前值,触发视图重绘。...通过地址访问和下载GitHub - jienian/MiniPanApp: 1.编写仪表盘和速度盘2.根据车速显示对应数字图像结语自定义仪表盘视图开发增强了车机应用视觉效果,通过本文介绍,开发者可以掌握在平台上实现自定义高级

    18120

    Android控件之ImageView

    零、前言 1.ImageView地位:直接继承自View,源码1600+,算是个小类,但图片显示基本都用它 2.scaleType有点小烦,不过看图还是挺清晰 3.cropToPadding...、adjustViewBounds、tint 4.图片设置 源码中ImageView自定义属性: * @attr ref android.R.styleable#ImageView_adjustViewBounds...:不改变原图大小,从ImageView左上角开始绘制,超过ImageView裁剪 二、剪裁:cropToPadding:需要与scrollX或scrollY同用,单独无效 测试时true和false..." 2.代码中设置 Drawable和Bitmap都是中图片显示和处理重要类,以后会详细论述。...2.连接传送门: 更多技术欢迎访问:技术栈 我github地址:欢迎star 简书首发,腾讯云+社区同步更新 张风捷特烈个人网站,编程笔记请访问:http://www.toly1994

    1K00

    用 Java 做个“你画手机猜”小游戏

    随着算力不断增进,机器学习任务已经可以直接在边缘设备部署,包括各类运行系统智能手机。但是,由于本身主要是用 Java ,部署基于 Python 各类深度学习模型变成了一个难题。...在这个文章中,我们将尝试通过 PyTorch 预训练模型在在平台构建一个涂鸦绘画应用。由于总代码量会比较多,我们这次会挑重点把最关键代码完成。你可以后续参考我们完整项目进行构建。...3.2 第二步: 应对绘画动作 在设备,你可以自定义触摸事件响应来应对用户各种触控操作。...进行推理任务 最后,我们来实现之前定义好 runInference 方法。...期待看到你创建第一个 DoodleDraw 游戏! 最后,可以在GitHub找到本教程完整案例代码。

    1.6K20

    3-VIV-Android控件之ImageView

    零、前言 [1].ImageView地位:直接继承自View,源码1600+,算是个小类,但图片显示基本都用它 [2].scaleType有点小烦,不过看图还是挺清晰 [3].cropToPadding...、adjustViewBounds、tint [4].图片设置 源码中ImageView自定义属性: * @attr ref android.R.styleable#ImageView_adjustViewBounds...ImageView裁剪类型.gif fitCenter:按比例扩大或缩小到ImageViewImageView高度,居中显示 fitEnd:按比例扩大(缩小)到ImageView高度,显示在ImageView...:不改变原图大小,从ImageView左上角开始绘制,超过ImageView裁剪 二、剪裁:cropToPadding:需要与scrollX或scrollY同用,单独无效 测试时true和false...Drawable和Bitmap都是中图片显示和处理重要类,以后会详细论述。

    76720

    Android自定义TextView实现文字图片居中显示方法

    最近有个需求是这样,人民币符号“¥”因为手机系统不一致导致符号不是完全一样,所以用美工图片代替,考虑到用地方比较多,所以想着写一个继承于线性布局组合控件,后来一想,中不是有TextView...吗,这个自带图片控件,后来写了个demo,因为我是用MatchParent,导致问题出现,人民币符号不是和文字一样居中,因此才有了这篇博文,让我们来自定义TextView吧,这个场景用比较多。...X轴和Y轴分别平移了scrollX ..和scrollY,平移后,将left方向图片绘制上去,最后restore还原到上个画布中,Right同理。...那这样,咱基本就明白原理,TextView四个方向都是通过Canvastranslate来绘制到文字上下左右了,那咱们就只改这个scrollX 和 scrollY就可以实现咱需求了吧。...以上这篇Android自定义TextView实现文字图片居中显示方法就是小编分享给大家全部内容了,希望能给大家一个参考。

    2.2K30

    从0开始学自定义View -1

    初识View 在中所有的样式都可以说是一个视图,TextView,Button,ImageView...这些官方已经给出view已经无法满足我们日常生活所需了,这个时候,我们就可以自定义View...返回xy坐标点进行绘制。...onDraw绘制View 这个方法就厉害了,所有的绘制工作都是里面的canvas去完成,canvas翻译过来是帆布意思,对我们来说就是画布画布有了,还差画笔,有笔有布有多彩墨水才能画出大好河山嘛,这里先介绍画笔...结果是使用此画笔绘制绘制 src 将与使用默认画笔绘制绘制 dst 相同(至少从几何角度来说是这样)。 ?...好了,到这里对canvas画简单图案是告一段落了,那么我们之前获取到尺寸是干嘛用呢,下面我们对拖拽进行讲解,拖拽其实就是down,move,up对着三者一个解析,当我们手指按下时候将会出发down

    90530

    Android开发笔记(一百五十三)OpenGL绘制三维图形流程

    从这篇文章开始,接下来会连载一系列OpenGL相关博文,好好探讨如何在Android中进行OpenGL开发。...不过对于初次接触OpenGL开发者来说,三维绘图概念可能过于抽象,所以为了方便读者理解,下面就以Android二维图形绘制为参考,亦步亦趋地逐步消化OpenGL相关知识点。...从前面的学习可以得知,每个Android界面上控件,其实都是在某个视图上绘制规定文字(TextView),或者绘制指定图像(ImageView)。...正如前面介绍Android自定义控件那样,有了视图View、画布Canvas、画笔Paint,方能绘制炫彩多姿各种控件。...和onLayout两个函数功能; 3、onDrawFrame顾名思义跟自定义控件onDraw函数差不多,onDraw函数用于绘制二维图形具体形状,而onDrawFrame函数用于绘制三维图形具体形状

    1.9K20

    2018-07-25

    rv1.png rv2.png rv3.png rv4.png rv5.png rv点击1.gif rv点击2.gif 增加与删除.gif CardView.gif 访问地址,返回Json数据.png 中使用....png 电子书.png SpannableString 阴影.png 字间距.png HTML.png 自定义字体.png 可选择.png 设置贴图.png 绘制一个五角星过程.png 五角星演示.....png 宽高.png 宽高控制.png 效果图 点击事件.gif 点击事件升级.gif 与Path结合.png 方向.png 拉环控件 拉环控件.gif 混沌战士 网格坐标系效果 深拷贝.png...png 结果.png handler2.png 延迟.gif empty.png post.png runout.png 接口.png json.png retrofit1.png json.png 获取...json.png 获取json异步.png 请求图片结果.png 定义参数.png pull解析.png use_svg.png 局限性.png 关于密码问题.png 发送邮箱.png 发送html

    83120

    微信活动小程序性能优化实践

    第三步,优先加载首屏,对于一些不重要资源,或者不会出现在首屏图片和canvas画布,进行了延迟加载,这样就保证了首屏速度,对于一些性能不佳机型,canvas画布延迟加载,效果比较明显。...在这个基础,再乘以9,即使是 wifi 高速上传,图片上传过程也将相当缓慢。为了鼓励用户多发帖,多发图,我们必须要解决这个问题。 因此发图之前,需要压缩图片,压缩再压缩,主要思路如下: ?...经过兼容性测试,我们发现,部分机型绘制出来图片背景存在黑屏,为canvas添加一层白色打底绘制后可以解决。...小程序中,特别是下,canvas画布不能太大,数量不能多,为避免小程序crash,我们只保留一个canvas,因此只能一张一张压缩,这里就需要维持一个压缩队列。...节约内存,图片和canvas懒加载是基本策略,下使用webp图片,也能有效减少25%左右内存消耗,发现页长列表图片,使用腾讯云压缩后,下载到图片尺寸大大减小,进一步减少了内存消耗。

    6.6K60

    微信小程序|简单易上手画板功能

    问题描述 大部分用户手机里是没有自带画板功能,而在近期网课盛行之时,一个随手可用手写面板,无论是在写笔记方面,还是在辅助授课方面,一个小画板就体现出了很大作用。...图2.1 画板效果图 解决方案 1.了解canvas组件 小程序中画板功能可以通过canvas画布组件来实现,了解canvas组件基本属性是实现画板功能基础。...,并在其中配置动作坐标;绘制完成之后,如果需要清除画布,则创建一个cleardraw: function (){}函数,在里面重置坐标的高和宽。...canvasIdErrorCallback"> 清除画板...context.draw(false); }, canvasEnd: function (event) { isButtonDown = false; }, //清除画布

    1.9K10

    在React Native中构建启动屏

    此外,由于Expo很受欢迎,许多人常常选择使用它,我们也将探讨如何在Expo中构建启动屏幕。 什么是启动画面? 启动画面是用户访问应用程序其余功能之前出现第一个屏幕。...完成后应用将如下图所示 为什么启动画面的图片大小很重要 为移动应用创建启动画面可能会有些棘手,你肯定不希望由于启动画面分辨率不一致在某些设备出现显示问题。例如,设备需求与iOS完全不同。...在你继续之前,请确保你有一张高清,2000x2000像素(72 PPI)图片准备好。你可以在GitHub克隆这些教程完整源代码。...取消选中 Safe Area Layout Guide 选项,点击加号图标 +,在对象搜索输入框中输入“image view”,然后将“image view”拖到 View 画布: 现在我们已经设置好了图像视图...然而,Android会自动缩放可绘制图像,所以你不一定需要为不同手机尺寸提供图片。回想一下,我们之前将两个文件夹(Android和iOS)复制到了我们资产目录。

    44610

    用canvas画了个table,手写滚动条

    在开始本文之前,主要是从以下方向去思考: 1、canvas绘制table必须满足我们常规table方式 2、因为table内容是显示在画布中,那如何实现滚动条控制,canvas是固定高 3、内容分页显示需要自定义滚动条...本质就是前端做了一个假分页 3、每次设置数据要清除画布,重置画布宽高,重新绘制 clearCanvans() { // 当宽高重新设置时,就会重新绘制 const { el } = this...canvans里面绘制自定义dom 其实在canvas里面所有的元素都是绘制,但是如果在canvas里面绘制个input或者下拉框,或者是第三方UI组件,那基本是很困难,那怎么办呢?...这时候需要我们移花接木,把需要自定义内容div定位覆盖在canvas,我们在之前基础结合vue3,实现在canvas里面自定义dom 先看下新布局结构 ...总结 canvas实现一个简易table,如何绘制table表头,以及表内容 如何手写个滚动条,并且滚动条边界控制,滑动画布,控制滚动条位置 canvas绘制table如何自定义dom渲染,主要是采用定位方式

    5K20
    领券