`
喧嚣求静
  • 浏览: 550831 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android动态改变shape填充颜色

阅读更多

工作中需要依据不同的银行卡显示不同背景,由于银行很多,不可能用图片,想到了用Shape,但数量多,也不可能写死在shape的XML文件中,

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#971417" ></solid>

    <corners  android:topLeftRadius="10dp"    android:topRightRadius="10dp"
        android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
   <!-- <stroke android:width="1dp" android:color="#971417" />-->
</shape>

 最后决定用代码方式

 public static Drawable getBgDrawableByBankNo(Context ctx, String bankNo){
       // int strokeWidth = 5; // 0dp 边框宽度
        //int roundRadius=TypedValue.applyDimension(); // 10dp 圆角半径
       // int strokeColor = Color.parseColor("#2E3135");//边框颜色
        int fillColor = Color.parseColor("#971417");//内部填充颜色
        int topLeftRadius= DisplayUtil.dip2px(ctx,10);
        int topRightRadius=topLeftRadius;
        int bottomRightRadius=0;
        int bottomLeftRadius=0;

        GradientDrawable gd = new GradientDrawable();//创建drawable
        gd.setGradientType(GradientDrawable.RECTANGLE);
         gd.setColor(fillColor);
       // gd.setCornerRadius(roundRadius);
        //1、2两个参数表示左上角,3、4表示右上角,5、6表示右下角,7、8表示左下角
        gd.setCornerRadii(new float[] { topLeftRadius,
                topLeftRadius, topRightRadius, topRightRadius,
                bottomRightRadius, bottomRightRadius, bottomLeftRadius,
                bottomLeftRadius });
       // gd.setStroke(strokeWidth, strokeColor);

        return gd;
    }

 使用

iv.setBackgroundDrawable(xxx);

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics