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

Android: View.getBackground().getConstantState()不能比较背景和可绘制

Android中,View.getBackground().getConstantState()方法用于获取View的背景Drawable的ConstantState对象。ConstantState是Drawable的内部类,它代表了Drawable的不可变状态,包括Drawable的绘制属性和状态。

在Android中,Drawable是用于绘制View背景、图标、图片等可绘制对象的基类。每个Drawable对象都有一个ConstantState对象,它保存了Drawable的不可变状态。通过调用View.getBackground()方法可以获取View的背景Drawable对象,然后再调用getConstantState()方法获取Drawable的ConstantState对象。

然而,由于ConstantState是Drawable的内部类,它的比较是基于对象的引用比较,而不是比较Drawable的绘制属性和状态。因此,直接使用View.getBackground().getConstantState()进行比较是不可行的,因为它只能判断两个Drawable对象是否是同一个对象,而不能判断它们的绘制属性和状态是否相同。

如果需要比较两个Drawable的绘制属性和状态是否相同,可以使用其他方法,例如使用Drawable的equals()方法进行比较,或者比较Drawable的具体属性,如颜色、形状等。

关于Android中Drawable的使用和相关知识,可以参考腾讯云的相关文档和产品:

  1. 腾讯云文档:Android Drawable概述 链接:https://cloud.tencent.com/document/product/454/7879
  2. 腾讯云产品:腾讯云移动开发平台 链接:https://cloud.tencent.com/product/mmp
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android动画基础 | 概述、逐帧动画、视图动画

代码处,实例化这个View控件; 通过(AnimationDrawable)view.getBackground();获得view的背景Drawable对象并向下转型为AnimationDrawable..."属性,也可实现; 小结: 逐帧动画的基础是帧,也即图片,图片一般由美工制作; 没有原图就无法制作逐帧动画,则应用范围比较小; 将一套帧图设置在(AnimationDrawable...View对象; 使用view实例getBackground()获得背景; view.getBackground()返回的是一个Drawable对象, 在这里已经明确背景是AnimationDrawable...或者给添加android:oneshot="true"属性,也可实现: ? 3.1 视图动画....我们可以看到动画视图发生了偏移, 但是超出父控件的部分是不能被绘制出来的;(有上面的定制,描边区域内即父控件) 可以知道上文的 缩放动画 其实有一部分是超出了父布局,从而没有显示出来 要权宜解决这个问题也很简单

4K21

Android中的各种Drawable类详解

视图View的背景就是一个Drawable对象,在视图需要进行绘制而调用draw函数时,内部的一部分实现会将调用委托给背景属性mBackground这个Drawable对象的draw函数来完成背景的绘制...ColorDrawable 颜色可绘制类 颜色可绘制类。类构造时指定一个颜色,或者调用setColor指定颜色,setAlpha函数会把设置的透明度和本来的颜色的透明度相乘。...AnimationDrawable 帧动画可绘制类 这是一个容器可绘制类,用于定期播放一批指定的Drawable。不可以和ClipDrawable结合起来播放逐渐展开的动画。...你可以在构造中指定缩放的比例和缩放的中心点,注意的是所缩放的Drawable对象的level不能为0: public ScaleDrawable(Drawable drawable, int gravity...一般用这个类来设置圆角按钮背景。 LayerDrawable 图层可绘制类。 用于重叠多个可绘制对象。这是一个容器可绘制类,里面可以添加多个子可绘制对象,每个子可绘制对象就是其中的一层。

1.6K20
  • Android 透明状态栏(伪沉浸式)

    而由于 Android API 的不同,需要考虑 4.4、5.0、6.0 前后的不同。...因为如果是图片,就不能设置状态栏颜色或者盖个 View 上去,而是让状态栏透明,内容往下,让图片透上去,当然如果是子 View 的图片,还不能 setFitsSystemWindows。...private boolean setStatusBarWithViewBg(View view, boolean isRootView) { Drawable drawable = view.getBackground...状态的重置 因为考虑同一个 Activity 多次改变状态栏颜色的情况,遇到的一个比较烦的问题是,许多状态需要重置,不然就会影响下一次,而且如果设置图片又改成颜色的,那么要考虑的更多,一会希望图片内容顶到状态栏下面...后来考虑将颜色和图片的逻辑分开,因为有图片时要重置的和只是改状态栏颜色的不一样,放一起如果只是改状态栏颜色会走大量无意义的逻辑,当然 4.4 版本也是要将内容往下,也要特殊考虑。

    2.4K20

    Android入门教程 | res资源目录简介与shape的绘制和使用

    drawable/:位图文件(.png、.9.png、.jpg、.gif)或编译为以下可绘制对象资源子类型的 XML 文件: 位图文件、九宫格(可调整大小的位图)、状态列表、形状、动画可绘制对象、其他可绘制对象...mipmap/:适用于不同启动器图标密度的可绘制对象文件。应用图标放这里。 mipmap后面跟着的dpi类别,比如hdpi mdpi,里面的图标尺寸大小是不同的。...shape的绘制和使用 工程目录中有一个drawable文件夹,里面存放的是一些静态的图片资源文件。...比如位图文件(.png、.9.png、.jpg、.gif);或一些可绘制对象资源子类型的 XML 文件(本文称为drawable文件)。...[1240] shape介绍 shape又称为“形状可绘制对象”。为了简便,以下都称作shape或者“shape文件”。 shape是一种在 XML 文件中定义的通用形状。

    1.5K20

    Android性能优化系列之渲染优化

    最容易看出的是这两条,我们先分析和优化这两条,然后再进行其他的优化. 优化过渡绘制区域 在进行位置确认后,我们大概确定了过渡绘制的区域,让我们来使用工具来进行验证和View确认....和主题有关,即这个背景是属于ActionBarOverlayLayout的.这种类型的过渡绘制解决也比较方便,在文件管理器的主Activity的onCreate方法中,加入 this.getWindow...组成,前者是上面可以左右拉动的那部分,后者是底部不能拉动的那部分(这个从HierarchyView中也可以看出来:如下图所示: 点击CustomViewBehind,查看其所占的区域,就可以发现背景是这个...的颜色也比之前要浅了,这一步优化需要根据具体情况进行) 下面是优化后的效果图: 通过调整,已经发现绘制优化了很多 Android渲染优化工具介绍 使用Lint优化代码 Lint工具的使用比较简单,根据给出的提示做对应的修改即可...分析GLTrace文件,下图是优化过后的图,对比优化前的图可以发现,优化后不会去绘制默认的背景图和CustomViewBehind的背景图.

    99930

    应用开发进阶必经之路之性能优化(上)

    有时候产品在市场上的表现差,真不能全怪产品和运营,程序体验问题也是很大一部分原因。   ...但大部分产品并没有足够重视性能问题,随便打开一个应用,即使是大厂出品,也极大可能存在过渡绘制和内存泄露的问题;也有可能是开发人员意识到了程序存在性能问题,但完成迭代就够忙的了,哪有时间去做这类不能体现绩效的事情...性能指标的定义应该具有可衡量、可比较的特点,所以每项性能指标可以是数值,也可以是一份报告,比如: 流畅度:FPS,即Frams per Second,一秒内的刷新帧数,越接近60帧越好; 启动时间:时间...(4) 去掉不必要的背景 如果不是通过测量和仔细分析,你很难发现这个不经意的细节会是导致过渡绘制、内存问题的主要原因,每个Activity都会在AndroidManifest.xml...总结一下过渡绘制的检测和解决方案:通过“开发者选项”中的“显示过渡绘制”和Android提供的工具“HierarchyViewer”,以每个界面为单位,可以完全检测出每个界面的过渡绘制问题;因为导致过渡绘制的原因不一

    72320

    HenCoder Android 自定义 View 1-5: 绘制顺序

    例如通常一个 LinearLayout 只有背景和子 View,那么它会先绘制背景再绘制子 View;一个 ImageView 有主体,有可能会再加上一层半透明的前景作为遮罩,那么它的前景也会在主体之后进行绘制...这其中的第 2、3 两步,前面已经讲过了;第 1 步——背景,它的绘制发生在一个叫 drawBackground() 的方法里,但这个方法是 private 的,不能重写,你如果要设置背景,只能用自带的...API 去设置(xml 布局文件的 android:background 属性以及 Java 代码的 View.setBackgroundXxx() 方法,这个每个人都用得很 6 了),而不能自定义绘制...drawBackground(Canvas); // 绘制背景(不能重写) onDraw(Canvas); // 绘制主体 dispatchDraw(Canvas); // 绘制子 View...所以如果我想给这个 EditText 加一个绿色的底,我不能使用给它设置绿色背景色的方式,因为这就相当于是把它的背景替换掉,从而会导致下面的那条横线消失: <EditText ...

    81630

    Android CompoundButton

    android.widget.Button      android.widget.CompoundButton RadioGroup不是CompoundButton的子类,所以不能直接使用CompoundButton...返回值 定义了的OnClickListener被调用返回True,否则返回False public void setButtonDrawable (Drawable d) 给按钮背景设置一个可绘制对象...(如:图像) 参数 d 用作背景的可绘制对象(如:图像) public void setButtonDrawable (int resid) 通过资源Id给按钮背景设置一个图像 参数 resid...参数 canvas 在画布上绘制背景 protected boolean verifyDrawable (Drawable who) 如果你的视图子类显示他自己的可视化对象,他将要重写此方法并且为了显示可绘制返回...此操作允许进行绘制时有动画效果。   确认当重写从方法时,需调用父类相应方法。 参数 who 需判断的可绘制对象(Drawable)。

    91120

    Android性能优化(二)之布局优化面面观

    一、初识布局优化 通过《Android性能优化(一)之启动加速35%》我们获得了闪电般的App启动速度,那么在应用启动完毕之后,UI布局也会对App的性能产生比较大的影响,如果布局写得糟糕,显而易见App...去掉背景色之后再看一下Overdraw; ? 对比一下优化后的布局的颜色,可以看出Overdraw降到了可以接受的程度。 备注:有些过度绘制都是不可避免的,需要结合具体的布局场景具体分析。...:text="Merge标签演示" /> 我们通过UiAutoMatorViewer(无需root,相比Hierarchy Viewer只能查看布局层次,不能得到绘制时间...Android定义了ViewStub类,ViewStub是轻量级且不可见的视图,它没有大小,没有绘制功能,也不参与measure和layout,资源消耗非常低。...include标签 include标签和布局性能关系不大,主要用于布局重用,一般和merge标签配合使用,因和本文主题关联不大,此处不展开讨论。

    94930

    绘制优化

    比如上面界面中的『调试 GPU 过度绘制 』的那个文本显示为蓝色,表示其过度绘制了一次,因为背景是白色的,然后文字是黑色的,导致文字所在的区域就会被绘制两次:一次是背景,一次是文字,所以就产生了过度重绘...为了提升用户体验,提升应用的流畅性,优化过度绘制的工作还是很有必要做的。 优化原则 一些过度绘制是无法避免的,比如之前说的文字和背景导致的过度绘制,这种是无法避免的。...应用界面中,应该尽可能地将过度绘制控制为 2 次(绿色)及其以下,原色和蓝色是最理想的。 粉色和红色应该尽可能避免,在实际项目中避免不了时,应该尽可能减少粉色和红色区域。...</style>   但是一般界面都会自己设置界面的背景颜色或者列表页则由 item 的背景来决定,所以默认的 Window 背景基本用不上,如果不移除就会导致所有界面都多 1 次绘制。...DrawerLayout 就是一个很不错的例子,先来看一下使用 DrawerLayout 布局的过度绘制结果: 按道理左边的抽屉布局出来时,应该是和主界面的布局叠加起来的,但是为什么抽屉的背景过度绘制只有一次呢

    89910

    Android性能优化:手把手带你全面了解绘制优化

    影响的性能 绘制性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如何影响性能 绘制影响Android性能的实质:页面的绘制时间 1个页面通过递归 完成测量 & 绘制过程 3.... 问题 一般情况下,该默认的 Window 背景基本用不上:因背景都自定义设置 若不移除,则导致所有界面都多 1 次绘制 解决方案 移除默认的 Window 背景 //...如2个常见场景: 场景1:ListView 与 Item 列表页(ListView) 与 其内子控件(Item)的背景相同 = 白色,故可移除子控件(Item)布局中的背景 场景2:ViewPager...与 Fragment 对于1个ViewPager + 多个 Fragment 组成的首页界面,若每个 Fragment 都设有背景色,即 ViewPager 则无必要设置,可移除 关于更多场景,...总结 本文主要讲解Android 性能优化中的 绘制优化

    75520

    【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )

    过度绘制了 2 次 ; ③ 浅红色 : GPU 过度绘制了 3 次 ; ④ 深红色 : GPU 过度绘制了 4 次及 4 次以上 ; 一般情况下蓝色 , 和浅绿色是可以接受的 ,...红色 , 深红的区域绝对不能大范围出现 ; 3....过渡渲染示例 这是 Android 的设置界面 , 大部分是蓝色 , 或浅绿 , 浅红色只占很小的部分 ; 四、 背景过度绘制 ---- 1 ....背景设置 : ① 设置背景 : 设置了背景 , 图片或颜色值 , 绘制增加 1 次 ; ② 透明背景 : 背景透明 , 不增加绘制次数 , 绘制增加 0 次 ; ③ 主题背景 : 在主题中设置了背景..., 也会增加 1 次绘制 ; 如果同时设置布局的背景和主题背景 , 此时会绘制 2 次 ; 删除一次背景设置 , 这里建议删除主题的背景 ; 2 .

    2.3K20

    Android知识点基础篇(二)

    从定义来讲Binder是一种Android中实现跨进程的方式;也是一种虚拟的物理设备驱动,连接Service进程、Client进程和ServiceManager进程;而对于Android代码来说,Binder...参考文章:十分钟Android中的嵌套滚动机制 14. View的绘制原理,自定义View,自定义ViewGroup   View的绘制主要分为View的绘制和ViewGroup的绘制。...对于单一View的绘制,在draw方法中,依次绘制背景、内容、装饰。而我们经常重写的onDraw方法其实就是绘制内容。...而ViewGroup的绘制会扫尾复杂一些,首先还是绘制自身,依次是背景、内容、子View、装饰。绘制子View的时候ViewGroup会遍历子View,然后挨个绘制。...4 新的图片解码类ImageDecoder 5 Android P引入了一个新的AnimatedImageDrawable类来绘制和显示GIF和WebP动画图像。 20.

    95731

    Android性能优化:这些绘制优化你一定不能忽略!

    前言 本文主要讲解Android性能优化中的绘制优化 [1639288445117285.jpg] 过度绘制的优化原则 尽可能地控制 过度绘制的次数 = 2 次(绿色)以下,蓝色最理想 尽可能避免 过度绘制的粉色... 问题 一般情况下,该默认的 Window 背景基本用不上:因背景都自定义设置 若不移除,则导致所有界面都多 1 次绘制 解决方案 移除默认的 Window 背景 方式1:在应用的主题中添加如下的一行属性...如2个常见场景: 场景1:ListView 与 Item 列表页(ListView) 与 其内子控件(Item)的背景相同 = 白色,故可移除子控件(Item)布局中的背景 [1639288442676285...,可移除 [1639288442268923.jpg] 关于更多场景,可使用工具 Hierarchy View 查看,具体请看文章:?..., 0, clipRight, getHeight()); } ...... } quickreject() 作用:判断和某个矩形相交 具体措施:若判断与矩形相交,则可跳过相交的区域

    1.1K20
    领券