LockIconView-锁图标

观雪听涛 / 2023-05-29 / 原文

一、概述

 

二、LockIconView图标切换机制

DrawableState存储着控件的enable、pressed、checked等状态,绘制时根据这些状态绘制出不同的图像。DrawableState的基础属性是不可修改的,但是我们可以通过修改DrawableState来给控件添加一些本来没有的属性。比如ImageView继承自View,本来是没有checked属性的,基础属性只有一个state_enabled,baseStates={android.R.attr.state_enable},通过setImageState(int[] extraState, boolean merge)方法可以合并添加新的属性。其中,第一个参数表示追加属性,第二个参数表示是否和基础属性合并。

ImageView iv = findViewById(R.id.iv);
iv.setIamgeState(new int[]{android.R.attr.state_checked, android.R.attr.state_pressed}, true);
//extraStates = {android.R.attr.state_enabled, android.R.attr.state_checked, android.R.attr.state_pressed} iv.setIamgeState(
new int[]{android.R.attr.state_checked, android.R.attr.state_pressed}, false);
//extraStates = {android.R.attr.state_checked, android.R.attr.state_pressed} iv.setIamgeState(
new int[]{}, true);
//extraStates = {android.R.attr.state_enabled} iv.setImageState(
new int[]{}, false);
//extraStates = {}

 LockIconView就是利用这种机制来切换图标的。

 

 

三、图标刷新事件依赖