首页 > 其他分享 >在代码中实现android:tint效果

在代码中实现android:tint效果

时间:2023-05-16 10:31:47浏览次数:52  
标签:Drawable tint color image up context drawable android 代码


Android着色效果tint

Android有个tint的着色效果,这样有些纯色图片,如果需要显示别的颜色效果,直接加上就行,特别方便。这个网上一搜就有,效果如图:



android:tint="@color/x"


我这个原本是个黑色的图标,加上这句,就可以显示各种颜色。 使用很简单,直接在XML加上android:tint="@color/colorPrimary"就行;如果是背景,加上android:backgroundTint="@color/colorPrimary"就行,比单纯设置方便多了。 比如Button如果设置android:background="@color/colorPrimary"为纯颜色,那样会没有点击效果,需要点击效果还需要写个selector效果的drawable。如果要在Android5.0之上显示涟漪效果,还需要在drawable-v21中创建一个同名字的ripple效果的drawable XML写法简单,在代码中却有点麻烦。 网上搜索出来的方法有两种: 第一种不去区分版本,使用V4包的android.support.v4.graphics.drawable.DrawableCompat

ImageView image = new ImageView(context);
Drawable up = ContextCompat.getDrawable(context,R.drawable.ic_sort_up);
Drawable drawableUp= DrawableCompat.wrap(up);
DrawableCompat.setTint(drawableUp, ContextCompat.getColor(context,R.color.theme));
image.setImageDrawable(drawableUp);

第二种只能在API21以上使用

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {    
    ImageView image = new ImageView(context);
    image.setImageResource(R.drawable.ic_sort_down);
    image.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(context,R.color.theme)));
}

第一种虽然好用,且向下兼容,但有个问题,就是如果我在A界面使用,先打开A界面,再去打开有使用同一个图片的B界面,会发现即使B界面的该ImageView没使用Tint,也会有对应的着色效果。除非先进入的B界面,或者退出应用。

看有个DrawableCompat.unwrap(...)方法,试了一下,不管用,stackoverflow找到答案
http://stackoverflow.com/questions/30945490/drawablecompat-unwrap-is-not-working-pre-lollipop试了一下,可以了,完整如下:

ImageView image = new ImageView(context);

Drawable up = ContextCompat.getDrawable(context,R.drawable.ic_sort_up);
Drawable drawableUp= DrawableCompat.wrap(up);
DrawableCompat.setTint(drawableUp, ContextCompat.getColor(context,R.color.theme));

image.setImageDrawable(drawableUp);

layoutParams.addRule(RelativeLayout.RIGHT_OF, text.getId());
addView(image, layoutParams);

Drawable up1 = ContextCompat.getDrawable(context,R.drawable.ic_sort_up);
Drawable drawableUp1= DrawableCompat.unwrap(up1);
DrawableCompat.setTintList(drawableUp1, null);

倒数第三行写的那样,需要重新弄个Drawable 出来,用的同一个会导致之前设置的着色无效;倒数第二行测试使用wrap();也没出问题;最后一行一定用后面的那个Drawable ,用原来那个也会导致之前设置的着色无效。即使他们放在addView()之后。
当然,最后三行完整放在image.setImageDrawable(drawable);前面也是没有问题的,这边只是为了方便说明。
这些只是个人随便写的,又刚好有效,写法不一定对。



标签:Drawable,tint,color,image,up,context,drawable,android,代码
From: https://blog.51cto.com/u_14523369/6282572

相关文章

  • android 获取 imei号码
    核心代码:Imei=((TelephonyManager)getSystemService(TELEPHONY_SERVICE)).getDeviceId();1.加入权限在manifest.xml文件中要添加<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>2.代码 1./**2.*3.*4.*创建日期2010-4-29下午05:02......
  • 最新Android开发环境(Eclipse+ADT+Android 5.0)
     一、一切由运行时错误引起dalvikvmCouldnotfindclass'引用包.类',referencedfrommethod... 其实在编译时也会见到如下错误:      [dx]       [dx]troubleprocessing:      [dx]badclassfilemagic(cafebabe)orversion(0033.00......
  • Android滑动卡片视图:Sliding-deck
    Sliding-deck提供了一个直观的用户操作控件,可以滑动删除,快速预览。如果你想要一个view的堆叠效果而又不想让代码变复杂,这就是你需要的解决方案。使用说明:1.-配置项目依赖把 librarydependency添加到 build.gradle文件。dependencies{...compile'com.re......
  • Android滑动卡片效果:Swipecards
    一个类似于Tinder的Android库,用于创建滑动卡片效果。您可以向左或向右滑动来切换喜欢或不喜欢的内容。 //implementtheonFlingListenerpublicclassMyActivityextendsActivity{...@OverrideprotectedvoidonCreate(BundlesavedInstanceState){......
  • Android NDK开发介绍
    一、JNI基础介绍JNIistheJavaNativeInterface.Itdefinesawayformanagedcode(writtenintheJavaprogramminglanguage)tointeractwithnativecode(writteninC/C++).JNI(Java本地接口):定义一种方式,使得Java代码能与C代码或者DynamicSharedLibraries(动态共......
  • 基于人工蜂群(ABC)算法和粒子群优化算法的组合求解路径优化问题附Matlab代码
    基于人工蜂群(ABC)算法和粒子群优化算法的组合求解路径优化问题附Matlab代码针对经典人工蜂群算法在机器人路径规划中易于陷入局部极值,且寻优过程收敛速度较慢等问题,提出了一种基于粒子群改进人工蜂群算法.通过设计变异算子来增大极值在陷入局部最优时的跳出概率,提高机器人路径......
  • 代码随想录算法训练营第7天 | ● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和
     第三章 哈希表part02  今日任务  ●  454.四数相加II ●  383. 赎金信 ●  15. 三数之和 ●  18. 四数之和 ●  总结    详细布置   454.四数相加II  建议:本题是 使用map 巧妙解决的问题,好好体会一下 哈希法 如何提高程序......
  • R语言股市可视化相关矩阵:最小生成树|附代码数据
    原文链接:http://tecdat.cn/?p=17835最近我们被客户要求撰写关于股市可视化的研究报告,包括一些图形和统计输出。本文在股市可视化中可视化相关矩阵 :最小生成树在本文示例中,我将使用日数据和1分钟数据来可视化股票数据。我发现以下概念定义非常有用: 连通图:在无向图中,若任......
  • R语言中进行期权定价的Heston随机波动率模型|附代码数据
    原文链接:http://tecdat.cn/?p=12111最近我们被客户要求撰写关于Heston随机波动率的研究报告,包括一些图形和统计输出。在本文中,我将向您展示如何模拟股票价格的Heston随机波动率模型Heston模型是一种期权估值方法,它考虑到同一资产在给定时间交易的不同期权的波动性变化。它试图......
  • Python金融应用编程:衍生品定价和套期保值的随机过程|附代码数据
    全文链接:http://tecdat.cn/?p=5620最近我们被客户要求撰写关于金融应用编程的研究报告,包括一些图形和统计输出。在本文中随机过程对定量融资的许多方面都很有用,包括但不限于衍生品定价,风险管理和投资管理这些应用程序将在本文后面进一步详细讨论。本节介绍了量化融资中使用的一......