因为StatelistDrawable内获取状态以及drawable的方法都是被隐藏的,所以只有利用java的反射机制来获取各个状态,以及各个状态对应的drawable
StateListDrawable userDrawable = (StateListDrawable) mResources.getDrawable(backGround);
Method getStateCountMethod = slDraClass.getDeclaredMethod("getStateCount", null);
Method getStateSetMethod = slDraClass.getDeclaredMethod("getStateSet", int.class);
Method getDrawableMethod = slDraClass.getDeclaredMethod("getStateDrawable", int.class);
int count = (Integer) getStateCountMethod.invoke(userDrawable, null);
Log.d(TAG, "state count ="+count);
for(int i=0;i < count;i++){
int[] stateSet = (int[]) getStateSetMethod.invoke(userDrawable, i);
if(stateSet == null|| stateSet.length ==0){
Log.d(TAG, "state is null");
}else{
for(int j=0;j<stateSet.length;j++){
Log.d(TAG, "state ="+stateSet[j]);
if(stateSet[j] == -ENABLEED){
Log.d(TAG, "enabled false");
hasFalseEnabledDrawable = true;
Drawable drawable = (Drawable) getDrawableMethod.invoke(userDrawable, i);//这就是你要获得的Enabled为false时候的drawable
newDrawable.addState(new int[]{-ENABLEED}, drawable);
}
}
本文详细介绍了如何通过Java反射机制获取StateListDrawable中的状态和对应drawable,包括获取状态数量、状态集、以及根据状态获取drawable的过程。
5158

被折叠的 条评论
为什么被折叠?



