StateListDrawable与GradientDrawable 的运用

在Android开发中,我们时常会用到自定义drawable样式,在drawable中设置shape样式或是selector选择器,但是有时如果一个xml中需要用到多个drawable样式,并且里面设置的样式只是有细微的差别改变,那么自定义多个drawable样式会显得比较臃肿,使得drawable的xml文件太多,管理麻烦,所以有时A字兔君觉得可以在代码中创建drawable。

/**
     * 设置背景选择器
     *
     * @param pressedDraw
     * @param normalDraw
     * @return
     */
    private StateListDrawable getSelector(Drawable normalDraw, Drawable pressedDraw) {
        StateListDrawable stateListDrawable = new StateListDrawable();
        stateListDrawable.addState(new int[]{android.R.attr.state_selected}, pressedDraw);
        stateListDrawable.addState(new int[]{}, normalDraw);

return stateListDrawable;

}

这是在代码中创建selector,创建的类型是StateListDrawable,可以通过addState()为selector添加状态,但是要注意一点添加state时,是有顺序的,stateListDrawable会先执行最新添加的state,如果不是该state,在执行下面的state,如果把大范围的state放到前面添加,会导致直接执行大范围的state,而不执行后面的state。此外,在添加state中,在state前添加“-”号,表示此state为false(例如:-android.R.attr.state_selected),否则为true。

/**
     * 设置shape
     *
     * @param radius
     * @param fillColor
     * @param width
     * @param strokeColor
     * @return
     */
   private GradientDrawable getDrawable(int radius, int fillColor, int width, int strokeColor) {
       GradientDrawable gradientDrawable = new GradientDrawable();
       gradientDrawable.setCornerRadius(radius);
       gradientDrawable.setColor(fillColor);
       gradientDrawable.setStroke(width, strokeColor);
       return gradientDrawable;
   }

在代码中动态创建GradientDrawable ,可实现drawable样式中shape样式的功能,setColor等于shape中的填充色,setCornerRadius是设置shape中的圆角半径,如果要设置单个角的弧度,可以用setCornerRadii()设置每个角的弧度,setStroke()是描边,需要填写描边的宽和边的颜色。

时间: 2025-01-07 15:21:43

StateListDrawable与GradientDrawable 的运用的相关文章

Android动态生成按钮样式

动态生成按钮样式 使用: int borderColor = Color.parseColor("#2E3135"); int bgColor = Color.parseColor("#00FF00"); // 设置View背景样式,有边框宽度.边框颜色.圆角度数.背景颜色. GradientDrawable shape = DrawableUtils.createShape(1, 4, borderColor, bgColor); btn1.setBackgrou

Android Selector原理

android的selector对于android开发者而言再熟悉不过了,只要定义一个drawable目录下定义一个selector的xml文件,在布局文件中引用这个xml文件或者在代码中setBackgroundDrawable的时候使用此xml就可以实现控件按下或有焦点等不同状态的效果. 那么setBackgroundDrawable后为什么可以实现这个功能呢? 首先要了解一个Drawable类,Drawable是一个抽象的可绘制的图片类,这个类可以从一个本地路径中创建一个图片,也可以使用从

JAVA代码设置selector不同状态下的背景颜色

代码实现Shape 代码实现Selector StateListDrawable与GradientDrawable 的运用 在Android开发中,我们时常会用到自定义drawable样式,在drawable中设置shape样式或是selector选择器,但是有时如果一个xml中需要用到多个drawable样式,并且里面设置的样式只是有细微的差别改变,那么自定义多个drawable样式会显得比较臃肿,使得drawable的xml文件太多,管理麻烦,所以有时本星觉得可以在代码中创建drawable

利用StateListDrawable给button动态设置背景

项目中,遇到相同样式的Button,只是stroke颜色不一样.为了实现一个,就得写两个shape文件,一个selector文件:多个还得重复写. 解决方法: 结合StateListDrawable给button动态设置背景 public void initButton() { GradientDrawable fDrawable = (GradientDrawable) getResources().getDrawable(R.drawable.circle_button); fDrawabl

Android -- selector&&StateListDrawable

selector <?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 触摸时并且当前窗口处于交互状态 --> <item android:state_pressed="true" android:state_w

android中ColorStateList及StateListDrawable设置Selector

写过android的代码相信大家对Selector并不陌生吧,下面来看看这段xml文件是如何定义的 <?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 触摸时并且当前窗口处于交互状态 --> <item android:state

Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解

今天继续给大家分享下View的相关知识,重点有一下两点:   1.View的几种不同状态属性            2.如何根据不同状态去切换我们的背景图片. 开篇介绍:android背景选择器selector用法汇总 对Android开发有经验的同学,对 <selector>节点的使用一定很熟悉,该节点的作用就是定义一组状态资源图片,使其能够 在不同的状态下更换某个View的背景图片.例如,如下的hello_selection.xml文件定义: <?xml version="

StateListDrawable

Integer[] mButtonState = { R.drawable.defaultbutton, R.drawable.focusedpressed, R.drawable.pressed }; Button mButton = (Button) findViewById(R.id.button); mButton.setBackgroundDrawable(myButton.setbg(mButtonState)); public StateListDrawable setbg(Int

StateListDrawable 动态更换背景

系统中默认的按钮被按下的颜色和未点击时的颜色不一样,该种实现可以用Java代码和XML实现. Java代码实现(通过StateListDrawable) okBtn.setBackgroundDrawable(addStateDrawable(this, R.drawable.btn_normal, R.drawable.btn_    selected, R.drawable.btn_selected));   cancelBtn.setBackgroundDrawable(addStateD