栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android Drawable对应关系和各个子类使用详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android Drawable对应关系和各个子类使用详解

下边是drawable中各个标签对应的实现子类,想要在java代码中实现动态编写样式可以参考

xml标签Drawable实现子类
bitmapBitmapDrawable
nine-patchNinePatchDrawable
shapeShapeDrawable
layer-listLayerDrawable
selectorStateListDrawable
level-listLevelListDrawable
transitionTransitionDrawable
insetInsetDrawable
scaleScaleDrawable
clipClipDrawable
colorColorDrawable
gradientGradientDrawable

下边xml是一个样例,是checkBox的自定义的样式,顺带着帮助各位熟悉 Java Drawable 子类的使用,想要用 Java 代码来实现动态替换选中的颜色怎么编写呢?


    
        
            
            
            
        
    
    
        
            
                
                    
                
            
            
        
    


注:@drawable/selected 是一个对勾图标,被加入了绘制的圆中。

各位能自己实现吗? 下边是 Java 版本的:

// 对应第一个 item
GradientDrawable notChecked = new GradientDrawable();//创建drawable
notChecked.setColor(ContextCompat.getColor(context, R.color.color_fff));
notChecked.setShape(GradientDrawable.OVAL);
notChecked.setSize(DensityUtil.dp2px(context, 18), DensityUtil.dp2px(context, 18));
notChecked.setStroke(DensityUtil.dp2px(context, 0.5f), ContextCompat.getColor(context, R.color.color_909399));

// 对应第二个 item
GradientDrawable checked = new GradientDrawable();//创建drawable
checked.setColor(blue); // 设置自定义的颜色
checked.setShape(GradientDrawable.OVAL);
checked.setSize(DensityUtil.dp2px(context, 18), DensityUtil.dp2px(context, 18));
BitmapDrawable bitmapDrawable = (BitmapDrawable) ContextCompat.getDrawable(context, R.drawable.selected);
StateListDrawable stateListDrawable = new StateListDrawable();
// layer-list
LayerDrawable layerChecked = new LayerDrawable(new Drawable[]{checked, bitmapDrawable});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    layerChecked.setLayerSize(1, DensityUtil.dp2px(context, 10), DensityUtil.dp2px(context, 10));
    layerChecked.setLayerGravity(1, Gravity.CENTER);
}
// 对应最外层 selector
stateListDrawable.addState(new int[]{-android.R.attr.state_checked}, notChecked);//-代表属性为false
stateListDrawable.addState(new int[]{android.R.attr.state_checked}, layerChecked);

Java 实现是比较麻烦的,尤其是设置 StateListDrawable 的各种状态,开始自己摸索一直没发现如何设置 false,在网上搜索后才发现只需要在属性前方加一个负号即可。
下方是 StateListDrawable 可支持的各种属性的值

属性值含义
android:state_active是否激活
android:state_checkable是否可勾选
android:state_checked是否已勾选
android:state_enabled是否可用
android:state_first是否处于开始状态
android:state_focused是否已获得焦点
android:state_last是否处于结束状态
android:state_middle是否处于中间状态
android:state_pressed是否按下
android:state_selected是否选中
android:state_window_focused是否窗口已获得焦点

希望可以帮助到有在 Java 代码中实现复杂样式的同学。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/827372.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号