`
hemowolf
  • 浏览: 154615 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多

    如果您用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年金属压力容器市场现状与前景调研报告.pdf

    《2023-2028年金属压力容器市场现状与前景调研报告》是对当前金属压力容器行业的全面分析,旨在为相关企业和从业者提供决策支持。该报告详细探讨了行业监管环境、发展特性、市场趋势等多个关键方面。 首先,报告在...

    2023-2030年圆片瓷介电容器行业调研及前景趋势预测报告.pdf

    ### 2023-2030年圆片瓷介电容器行业调研及前景趋势预测报告 #### 一、圆片瓷介电容器行业概述与市场现状 **圆片瓷介电容器**是一种常见的被动电子元件,广泛应用于各种电子设备中。这类电容器通常具有体积小、可靠...

    行业分类-设备装置-带点状凸起的纸浆模塑容器盖及其加工方法和热压模具.zip

    《行业分类-设备装置-带点状凸起的纸浆模塑容器盖及其加工方法和热压模具》 本文将深入探讨一种创新的工业技术,即带点状凸起的纸浆模塑容器盖的制造工艺,以及与之相关的热压模具设计。这种技术在环保包装领域具有...

    容器育苗的方式方法PPT教案.pptx

    这项技术不仅提高了苗木的质量,还简化了育苗过程,使苗木在移植时减少了对环境的冲击,因此在现代农业和林业领域中具有重要的应用价值和广阔的发展前景。通过不断优化容器的选择、营养土的配制以及育苗过程中的管理...

    2024年中国不锈钢保温容器行业市场竞争模式及投资前景研究报告.pptx

    【中国不锈钢保温容器行业概述】 中国不锈钢保温容器行业在...综上所述,中国不锈钢保温容器行业面临激烈的市场竞争,但同时也拥有广阔的发展前景。投资者需充分了解市场动态,制定合理投资策略,以把握行业发展机遇。

    行业分类-设备装置-带点状凸起的纸浆模塑容器盖及其热压模具.zip

    《行业分类-设备装置-带点状凸起的纸浆模塑容器盖及其热压模具》 本主题涉及的是一个具体的技术领域,即纸浆模塑行业中的创新设计——带点状凸起的纸浆模塑容器盖及其制造过程中使用的热压模具。这种设计和工艺在...

    行业文档-设计装置-保温隔热发泡纸质容器.zip

    综上所述,发泡纸质容器以其环保性和功能性并重的特点,在包装行业中展现出了巨大的应用前景。它不仅有助于推动环保和节能的趋势,还为包装行业的创新和可持续发展提供了新的思路。随着研究的深入和生产技术的进步,...

    行业分类-设备装置-纸容器自动成型机的压模成型装置.zip

    随着消费者对环保包装需求的增长,这类设备的市场前景十分广阔。同时,随着科技的进步,压模成型装置也在不断优化,如引入智能控制技术,提高生产效率,减少能源消耗,以满足日益严格的环保标准和企业的经济效益需求...

    2021-2025年中国压力容器设备行业基于产业变化研究与战略决策咨询报告.pdf

    报告通过对压力容器设备行业的深入研究,提出了行业的发展前景和趋势预测,强调了面对变化时,选择和决策的重要性,并借鉴了马云关于变化的观点,指出变化是不可避免的,拥抱变化是企业发展的必由之路。 综合上述...

    行业分类-设备装置-多层纸容器.zip

    这份文档可能涵盖了设备的工作原理、维护指南、生产工艺优化建议,甚至包括行业趋势和市场前景的分析。对于从事这个领域的专业人士,深入理解这些内容将有助于提升生产效率,降低废品率,并确保产品质量符合客户需求...

    行业分类-设备装置-模塑原纸和由其生产的模塑纸容器.zip

    随着消费者对环保意识的提升,这一领域的市场前景广阔,企业需要不断研发创新,提升产品的环保性能和技术含量,以应对日益严格的环保法规和市场竞争。 总的来说,模塑原纸和模塑纸容器的生产和应用是现代包装行业中...

    行业分类-外包设计-竹片成型的包装容器的介绍分析.rar

    同时,随着消费者对环保意识的提高,愿意为环保产品支付溢价的人群也在不断扩大,这使得竹片包装容器具有良好的市场前景。 总结来说,竹片成型的包装容器是一种兼顾环保、美观和实用性的设计选择。它体现了人类对可...

    2023年玻璃保温容器及其玻璃胆行业洞察报告及未来五至十年预测分析报告.docx

    三、玻璃保温容器及其玻璃胆产业的未来发展前景 1. 市场规模预测:预计未来几年中国玻璃保温容器及其玻璃胆行业将持续扩大,市场规模有望进一步增长。 2. 大规模推广应用:随着消费者对健康生活品质追求的提高,...

    压力容器年度检验中Excel数据处理功能的应用.pdf

    在化工行业中,压力容器作为特种设备,每年都需要按照国家规定进行检查,并出具相应的...同时,文章也反映出技术人员在进行压力容器年度检查时,对于数据准确性和工作效率的追求,以及Excel在化工行业中的应用前景。

    行业分类-外包设计-由柔韧的编织材料生产编织片段以及生产包装容器的方法的介绍分析.rar

    《行业分类-外包设计-由柔韧的编织材料...在环保理念日益重要的今天,这种可持续发展的生产方式无疑具有广阔的市场前景。通过学习和实践这些方法,企业不仅可以提升产品品质,还能在包装设计上打造出独特的品牌标识。

    一种无纺布带色压花装置的制作方法.docx

    特别是无纺布带色压花产品,因其色彩丰富、设计多样而受到广泛欢迎。然而,传统的无纺布压花机在色彩效果的实现和操作复杂性方面存在不少问题,限制了其应用和发展。针对这一问题,一种新型的无纺布带色压花装置被...

    C#常用控件

    * ForeColor 属性:获取或设置窗体的前景色 * IsMdiChild 属性:获取或设置窗体是否为多文档界面(MDI)子窗体 * IsMdiContainer 属性:获取或设置窗体是否为多文档界面(MDI)子窗体的容器 * KeyPreview 属性:获取...

    行业-电子政务-用于检测超导电缆用电缆芯的方法和冷却容器.zip

    超导电缆技术的应用前景广阔,除了电子政务外,还可拓展到数据中心、城市电网、远程电力传输等多个领域。通过深入理解和应用这些检测方法和技术,将有效推动超导技术在不同领域的普及,为构建绿色、高效能源网络提供...

    HTML-embed代码详解

    通过使用 bgcolor 和 fgcolor 属性,可以设置音频或视频文件的前景色和背景色。 HTML-embed 代码提供了多种方式来控制音频或视频文件的播放、循环、音量大小、面板显示、开始时间、容器属性、容器单位、外观设置、...

Global site tag (gtag.js) - Google Analytics