1、走过的弯路

对于图片我们都知道怎么设置背景色,android:background="@color/black",就是在设置底色为黑色,但是效果并没有达到预期,没有实现响铃颜色的变化,只是做了一个遮挡,显示一个响铃轮廓,见图1红色框。

那个怎么设置一个响铃的色彩呢?首先想到的是编写一个.xml文件,因为之前用过此类方法解决控件圆角的问题。代码如下。

后来发现不行,见图1黄色框。通过查询资料和实测,发现一个item,就是一个画布,每张画布可以放置一个图片,但是底层的item会覆盖顶层的item,且不可设置透明度,所以此种方式无法实现上述我们提出的需求。

后来引入android:tint="@color/gray"属性解决了这个问题,效果见图1青色框。

tint属性是对图片进行着色,以适应不同需求。还有个属性android:tintMode="src_in"来配合它使用,顾名思义就是着色方式,默认采用src_in。一共有六中Mode,下面只简单列写,不解释具体含义。multiply、screen、srcin、src_over、src_atop、add

下面2节和3节实现点击更换底色效果。

2、最笨的方法-方法1

最笨的方法就是建立一个RelativeLayout布局,然后放入多个ImageView,不同的ImageView实现不同底色的png文件。因为RelativeLayout布局本身的特点,所有的ImageView都彼此覆盖,不存在轮廓改变的情况,正因为如此,可以通过设置不同ImageView的visibility属性来实现不同的ImageView。xml代码如下:

android:layout_width="wrap_content"

android:layout_height="wrap_content">

android:id="@+id/image_view_false"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@color/white"

android:src="@drawable/ic_notify"

android:tint="@color/gray"/>

android:id="@+id/image_view_true"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@color/white"

android:src="@drawable/ic_notify"

android:tint="@color/blue"

android:visibility="invisible"/>

java处理代码。因为我要实现的是两个底色png的切换,所以只做了两个ImageView。当然可以增加,但是相应的需要设置多个ImageView的Visibility属性,且不能简单地依靠布尔数据isSelect区分ImageView。

if(isSelectMode1)

{

imageViewTrue.setVisibility(View.INVISIBLE);

imageViewFalse.setVisibility(View.VISIBLE);

isSelectMode1 = false;

}

else

{

imageViewTrue.setVisibility(View.VISIBLE);

imageViewFalse.setVisibility(View.INVISIBLE);

isSelectMode1 = true;

}

3、使用API设置底色-方法2

使用第2节中的方法固然可以实现不同底色的png图片,但是就如第2节中说的那样,如果想实现多个底色的图片切换,一是需要多个ImageView,xml就变得不简洁;二是切换png颜色需要设置多个ImageView的Visibility属性,代码一看就不好;所以引入新的API实现上述需求。

imageViewButton.setColorFilter(Color.BLUE);

顾名思义,这个接口就是设置Filter的。那么我们采用一张图片实现png底色切换。xml代码如下:

android:id="@+id/image_view_button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@color/white"

android:src="@drawable/ic_notify"

android:tint="@color/gray" />

JAVA处理代码。

if(isSelectMode2) {

imageViewButton.setColorFilter(Color.GRAY);

isSelectMode2 = false;

}

else {

imageViewButton.setColorFilter(Color.BLUE);

isSelectMode2 = true;

}

4、继续优化-方法3

方法3实现了预期效果,代码也不是很多,但是有些控件无法通过此方法实现png切换,比如ExpandChildList等List控件或则其变形。所以最后还是需要做一个新的类。其中mySelect为控件MyImageView的选中状态。

MyImageView.java

public class MyImageView extends AppCompatImageView{

public boolean mySelect = false;

public MyImageView(Context context) {

this(context, null);

}

public MyImageView(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

public void setMySelect(boolean mySelect) {

this.mySelect = mySelect;

}

public boolean getMySelect()

{

return mySelect;

}

}

xml代码如下:

android:id="@+id/image_view_button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@color/white"

android:src="@drawable/ic_notify"

android:tint="@color/gray" />

java处理代码。

if(imageViewButton.getMySelect()) {

imageViewButton.setColorFilter(Color.GRAY);

imageViewButton.setMySelect(false);

}

else {

imageViewButton.setColorFilter(Color.BLUE);

imageViewButton.setMySelect(true);

}

源码地址:

本文地址:https://blog.csdn.net/guocctjpu/article/details/107871273

android png 动画背景透明,Android透明PNG文件添加底色相关推荐

  1. Android之webview背景设置为透明无效

    Adndroid 2.X的设置 webview是一个使用方便.功能强大的控件,但由于webview的背景颜色默认是白色,在一些场合下会显得很突兀(比如背景是黑色). 此时就想到了要把webview的背 ...

  2. 如何在Android上使背景20%透明

    本文翻译自:How to make a background 20% transparent on Android 我如何使Textview的背景大约20%透明(不完全透明),背景中是否有颜色(即白色 ...

  3. android自定义view背景透明度,Android 背景透明度设置总结

    一.写在前面的 在需求上遇到背景设置透明度还是比较常见的,设置透明度有几种方式,但是不同的场景应用下,不同的方式可能会出现一些问题.针对开发过程中的需求做以下总结. 二.先看效果图 图1. 图2. 图 ...

  4. android开机动画不播放,android 设置activity启动退出动画 | 解决设置activity 动画不生效问题...

    前提: 如果有动画,最好把activity 设置成透明,不然会有黑屏! true 方法一:代码里面设置 getActivity().startActivity(intent,bundle); getA ...

  5. android属性动画不流畅,Android动画之属性动画

    理解:指定一个开始的位置,再指定一个结束的位置,自动补充中间的变化过程 为了更好的演示,写了一个Demo,xml界面如下(最后有源码) 要介绍的有: 1.透明动画:alpha 2.位移动画:trans ...

  6. android旋转动画开源库,android 围绕中心旋转动画

    本文主要介绍Android中如何使用rotate实现图片不停旋转的效果.Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果 ...

  7. android textview获取背景颜色,Android TextView背景颜色与背景图片设置

    Android TextView 背景颜色与背景图片设置,android textview 控件,android textview 背景, android textview 图片,android te ...

  8. android+下落+动画,完美起航-Android面试题之动画+事件处理篇

    前言 提示:秋招在即,计蒙准备在国庆假期结束前整理一套Android初级面试题籍,希望对大家有所帮助 提示:以下是本篇文章正文内容 动画 1.Android 中的动画有哪几类 帧动画.补间动画.属性动 ...

  9. android toast设置背景颜色,Android 彩色Toast的实现代码

    Android默认的Toast太丑了,我们来封装一个花里胡哨的Toast吧,就叫ColoredToast. 效果: Toast有一个setView方法,通过它我们可以设置自定义的布局,这里我只是加入了 ...

  10. android画圆形背景图片,android圆形图片,圆形背景文字的CircleTextImageView开源组件...

    转[http://blog.csdn.net/ys408973279/article/details/50350313] 在项目中我们经常遇到需要显示圆形头像的需求,一般我们都使用hdodenhof/ ...

最新文章

  1. SpringMVC - SpringMVC的概述
  2. 数据结构实验之链表八:Farey序列
  3. 2019 年 CNCF 中国云原生调查报告
  4. id_Tech5_challenges--siggraph09
  5. 第七课 ActionScript 3语言进阶一
  6. Android之MVP 模式:简单易懂的介绍方式
  7. 【AI视野·今日NLP 自然语言处理论文速览 第二十五期】Fri, 1 Oct 2021
  8. 叠置分析(涉及结果属性和输入图层属性的关系)
  9. OracleDBA之数据库管理
  10. PAT甲级1054 map的使用
  11. 如何在Mac系统中修改设备名称
  12. java js 汉字对应拼音码,五笔码转换
  13. 自定义windows快捷键(autohotkey)的办法
  14. kryo java_使用Kryo序列化任意Java对象(获取IllegalAccessError)
  15. 需要记住的的资料网址
  16. iOS小技能:短信验证码的Checklist、格式校验、获取验证码处理流程(限制60s)
  17. coreldraw x4被禁用怎么办,cdr非法产品详细x4解决教程
  18. 【Wwise】一篇文看懂WwiseUnity热更
  19. 微信小程序|使用小程序制作一个足球拼图小游戏
  20. Vue3通过npm或者yarn启动后,显示“Network: use --host to expose”,无法访问

热门文章

  1. 一款PC端抖音去水印工具V1.86
  2. 使用nginx配置一级域名和多个二级域名
  3. c语言system title,system() – C语言库函数
  4. Webots中创建舵轮模型
  5. 在js中的瀑布流布局理解
  6. 计算机主机光驱弹不出来怎么办,光驱弹不出来怎么办,教你win10光驱弹不出来的应对办法...
  7. 同一文件夹下的excel文件合并成一个总excel
  8. LaTeX2021 公式编写、图文安装、详细教程、一文读懂
  9. 分享下奥创微群控的两个黑科技
  10. 计算机上无开根号功能 怎么计算机,攻略:2019年中级会计师无纸化考试 计算器怎么开根号?...