首页
学习
活动
专区
工具
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中的各种Drawable类详解

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

1.5K20

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

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

3.9K21

浅谈Android中Drawable使用知识总结

能够在canvas上绘制的一个玩意,而且相比于View,并不需要去考虑measure、layout,仅仅只要去考虑如何draw(canavs)。...当一个View希望背景比自己实际区域小的时候,可以用这个Drawable。...默认是矩形,linering必须通过<stroke 标签来指定线的宽度颜色等信息,否则无法达到预期的显示效果。...使用scale的时候需要考虑ScaleDrawable的level值,levle是0的时候表示ScaleDrawable不可见,0也是默认值,所以要想ScaleDrawable可见,level等级不能是...level值的范围系统规定0-10000,设置level值的方法: 将相应的Drawable设置成一个View的背景 从View的背景中取得相应Drawable对象,代码view.getDrawable

1.2K10

android studio xml文件实现添加注释

–注释内容 — 的方式进行 在XML中,形如 <Button / 的表示方式,其中“/ ”的含义表示这个XML中没有内文,他是一个最小组成单元,也就是说他的中间不能包含其他任何< 的代码,所以在...圆、椭圆、圆环,可以实现圆角、渐变,shape编写出来的资源,可以作为View的背景,减少View使用图片作为背景图的概率,从而减少apk体积,相对比图片要更节省内存,shape标签编写出来的资源一般放到...shape标签如何使用: shpae标签的载体是一个xml文件,一个xml里同时只能存在一个shape标签,在shape标签里声明一些属性嵌套标签组合起来,可以得到一个视图资源,利用该资源可以填充View...--扫描渐变shape不能设置角度 #00ff0000 #80ff0000 ffff0000 -- <gradient android:centerColor="@color/colorCyan"...GradientDrawable.SWEEP_GRADIENT); //动态改变GradientDrawable的属性 GradientDrawable drawable =(GradientDrawable)view.getBackground

1.3K42

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 使用Xml文件定义Shape方式

补充知识:AndroidStudio XML文件之shape标签使用详解 前言: shape标签可以很方便的得到一些矩形、圆、椭圆、圆环,可以实现圆角、渐变,shape编写出来的资源,可以作为View的背景...,减少View使用图片作为背景图的概率,从而减少apk体积,相对比图片要更节省内存,shape标签编写出来的资源一般放到drawable文件目录下。...shape标签如何使用: shpae标签的载体是一个xml文件,一个xml里同时只能存在一个shape标签,在shape标签里声明一些属性嵌套标签组合起来,可以得到一个视图资源,利用该资源可以填充View...--扫描渐变shape不能设置角度 #00ff0000 #80ff0000 ffff0000 -- <gradient android:centerColor="@color/colorCyan...GradientDrawable.SWEEP_GRADIENT); //动态改变GradientDrawable的属性 GradientDrawable drawable =(GradientDrawable)view.getBackground

1.8K20

Android截屏方案实现原理解析

Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后进行分享或者其它用途 在截屏功能中,有时需要截取全屏的内容,有时需要截取超过一屏的内容(比如:Listview...版本中,已经可以用RecyclerView来代替使用ListView的场景,相比较ListView,RecyclerView对Item View的缓存支持的更好。...可以采用ListView相同的方案,这里也是在stackoverflow上看到的方案。...返回到顶部 while (mRecyclerView.canScrollVertically(-1)) { mRecyclerView.scrollBy(0, -oneScreenHeight); } //绘制截图的背景...Exception e) { e.printStackTrace(); } } else callBack.onSuccess(null, ""); } }); thread.start(); } /** * 实现任意宽高比例压缩

1.6K51

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.4K20

Android中的图片优化完全指南

更不小心的同学可能直接把这些操作代码写在UI线程,然后写在子线程又比较麻烦,这边推荐的是使用自定义绘制,canvas有个drawBitmap方法可以把某个区域绘制到指定位置。...这里列举一些实例,好让大家可以进一步理解: 一个按钮有普通按下状态,按下是普通状态上面叠加一个遮罩,不需要切两张图,按下状态的Drawable可以使用自定义Drawable的canvas先绘制普通状态的图...,这个逻辑性比较强了,这里就不具体展开,canvas的操作学习下,结合局部绘制其实很简单 有个图片,需要在左上角显示一个角标,正常情况下面需要在左上角摆一个view,如果使用Drawable自定义绘制,...第七条规则:多使用自定义View或者Drawable自定义绘制 图片格式发展到今天已经非常多样了,目前很多开源库都支持了webp来代替jpggif,webp在压缩率上面有很多优势,虽然解码上面略逊一筹...Android P上面支持了heif格式也是想代替jpg,不过这个格式目前还没仔细研究过。

1.4K10

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

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

88530

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 ...

77430

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

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

69420

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)。

85420

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

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

86930
领券