如果您用google play会发现当按下应用图标时,会出现一透明色覆盖在图标上面(如下图)。注意这个不是background效果而是foreground或是遮罩(overlay)。
实现这种效果通常的思路是在容器(LinearLayout、RelativeLayout等)画玩子控件后,再画一透明色或透明图片在容器顶层达到覆盖遮罩的效果。不过这种思路还需重载onTouchEvent来监听手指按下、抬起等,而且实现将非常的繁琐。
幸好还有更加便捷的实现方法:那就是google在View类中提供的getDrawableState、drawableStateChanged方法。getDrawableState返回的是视图状态,而drawableStateChanged即是状态发生变化时调用。ok!有了这2个api我们就可以挂接到Drawable的callback设置相应的状态(setState),从而根据不同的状态绘制不同的drawable状态(selector).
下面是一个简单的控件代码
package com.droidwolf.overlay; import android.content.Context; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.LinearLayout; public class OverlayContainer extends LinearLayout { private Drawable mForeground; private final Rect mBound = new Rect(); public OverlayContainer(Context context) { super(context); } public OverlayContainer(Context context, AttributeSet attrs) { super(context, attrs); } public Drawable getForegroundDrawable() { return mForeground; } public void setForegroundDrawable(Drawable draw) { if (draw == mForeground) { return; } if (mForeground != null) { unscheduleDrawable(mForeground); mForeground.setCallback(null); } mForeground = draw; if (draw != null) { if (draw.isStateful()) { draw.setState(getDrawableState()); } draw.setCallback(this); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); mBound.set(0, 0, getMeasuredWidth(), getMeasuredHeight()); } @Override protected void drawableStateChanged() { super.drawableStateChanged(); if (mForeground != null && mForeground.isStateful()) { mForeground.setState(getDrawableState()); } } @Override protected boolean verifyDrawable(Drawable who) { return super.verifyDrawable(who) || (who == mForeground); } @Override public void dispatchDraw(Canvas canvas) { if (mForeground == null) { super.dispatchDraw(canvas); } else { final int sc = canvas.save(); super.dispatchDraw(canvas); mForeground.setBounds(mBound); mForeground.draw(canvas); canvas.restoreToCount(sc); } } }
需要注意的是如果容器的子控件设置了OnClickListener事件,mForeground绘画状态就有可能失效,这时您需要添加addStatesFromChildren属性并设置为true。
另:FrameLayout已经实现了foreground功能。
相关推荐
《2023-2028年金属压力容器市场现状与前景调研报告》是对当前金属压力容器行业的全面分析,旨在为相关企业和从业者提供决策支持。该报告详细探讨了行业监管环境、发展特性、市场趋势等多个关键方面。 首先,报告在...
### 2023-2030年圆片瓷介电容器行业调研及前景趋势预测报告 #### 一、圆片瓷介电容器行业概述与市场现状 **圆片瓷介电容器**是一种常见的被动电子元件,广泛应用于各种电子设备中。这类电容器通常具有体积小、可靠...
《行业分类-设备装置-带点状凸起的纸浆模塑容器盖及其加工方法和热压模具》 本文将深入探讨一种创新的工业技术,即带点状凸起的纸浆模塑容器盖的制造工艺,以及与之相关的热压模具设计。这种技术在环保包装领域具有...
【中国不锈钢保温容器行业概述】 中国不锈钢保温容器行业在...综上所述,中国不锈钢保温容器行业面临激烈的市场竞争,但同时也拥有广阔的发展前景。投资者需充分了解市场动态,制定合理投资策略,以把握行业发展机遇。
《行业分类-设备装置-带点状凸起的纸浆模塑容器盖及其热压模具》 本主题涉及的是一个具体的技术领域,即纸浆模塑行业中的创新设计——带点状凸起的纸浆模塑容器盖及其制造过程中使用的热压模具。这种设计和工艺在...
随着消费者对环保包装需求的增长,这类设备的市场前景十分广阔。同时,随着科技的进步,压模成型装置也在不断优化,如引入智能控制技术,提高生产效率,减少能源消耗,以满足日益严格的环保标准和企业的经济效益需求...
报告通过对压力容器设备行业的深入研究,提出了行业的发展前景和趋势预测,强调了面对变化时,选择和决策的重要性,并借鉴了马云关于变化的观点,指出变化是不可避免的,拥抱变化是企业发展的必由之路。 综合上述...
这份文档可能涵盖了设备的工作原理、维护指南、生产工艺优化建议,甚至包括行业趋势和市场前景的分析。对于从事这个领域的专业人士,深入理解这些内容将有助于提升生产效率,降低废品率,并确保产品质量符合客户需求...
随着消费者对环保意识的提升,这一领域的市场前景广阔,企业需要不断研发创新,提升产品的环保性能和技术含量,以应对日益严格的环保法规和市场竞争。 总的来说,模塑原纸和模塑纸容器的生产和应用是现代包装行业中...
同时,随着消费者对环保意识的提高,愿意为环保产品支付溢价的人群也在不断扩大,这使得竹片包装容器具有良好的市场前景。 总结来说,竹片成型的包装容器是一种兼顾环保、美观和实用性的设计选择。它体现了人类对可...
三、玻璃保温容器及其玻璃胆产业的未来发展前景 1. 市场规模预测:预计未来几年中国玻璃保温容器及其玻璃胆行业将持续扩大,市场规模有望进一步增长。 2. 大规模推广应用:随着消费者对健康生活品质追求的提高,...
在化工行业中,压力容器作为特种设备,每年都需要按照国家规定进行检查,并出具相应的...同时,文章也反映出技术人员在进行压力容器年度检查时,对于数据准确性和工作效率的追求,以及Excel在化工行业中的应用前景。
《行业分类-外包设计-由柔韧的编织材料...在环保理念日益重要的今天,这种可持续发展的生产方式无疑具有广阔的市场前景。通过学习和实践这些方法,企业不仅可以提升产品品质,还能在包装设计上打造出独特的品牌标识。
* ForeColor 属性:获取或设置窗体的前景色 * IsMdiChild 属性:获取或设置窗体是否为多文档界面(MDI)子窗体 * IsMdiContainer 属性:获取或设置窗体是否为多文档界面(MDI)子窗体的容器 * KeyPreview 属性:获取...
通过使用 bgcolor 和 fgcolor 属性,可以设置音频或视频文件的前景色和背景色。 HTML-embed 代码提供了多种方式来控制音频或视频文件的播放、循环、音量大小、面板显示、开始时间、容器属性、容器单位、外观设置、...
如果某个组件的前景色、背景色或字体属性没有被显式设置,这些属性将采用其所在容器的对应属性作为默认值。 在GUI中,组件的位置和大小通常由布局管理器(LayoutManager)决定。布局管理器负责确定组件的尺寸和位置...
"oc电子书翻页背景色统一效果"项目提供了一种解决方案,通过使用Objective-C(OC)编程语言,为iOS应用实现逼真的双面页面翻转效果,并确保前景色与背景色的协调统一。下面我们将深入探讨这一技术实现的关键知识点。...
总结,内外层组合式纸浆模塑容器是一种结合了环保、实用和美观的包装设计,不仅符合当前绿色包装的需求,还具有广阔的发展前景。通过深入理解其制作工艺和设计特点,我们可以更好地推广和应用这种可持续的包装解决...
例如,如果你先设置了组件的背景色,然后又设置了前景色,那么前一个设置可能会被后一个覆盖。因此,合理的设置顺序能确保我们期望的效果得以实现。 博文链接中的内容可能详细探讨了Swing组件属性设置的一些实践...