如何通过代码创建圆角矩形和图片背景选择器

通过xml文件创建shape来实现圆角矩形以及在res/drawable目录下创建图片背景选择器的方式这里就不用介绍,这里主要介绍如何通过代码来生成shape图形,以及生成图片背景选择器.

效果图:


图片展示的是一个FlowLayout,里面的都是一个个的TextView,TextView的背景shape和选择器就是通过代码动态生成的.

1.生成Shape和Selector的工具类:

package com.example.mchenys.mygoogleplay.utils;

import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.StateListDrawable;

/**
 * Created by mChenys on 2015/11/20.
 */
public class DrawableUtils {
    /**
     * 创建Shape 圆角矩形
     *
     * @param color  背景颜色
     * @param radius 圆角半径
     * @return
     */
    public static GradientDrawable getGradientDrawable(int color, float radius) {
        GradientDrawable drawable = new GradientDrawable();
        //设置形状为矩形
        drawable.setGradientType(GradientDrawable.RECTANGLE);
        //设置圆角半径
        drawable.setCornerRadius(radius);
        //设置颜色
        drawable.setColor(color);
        return drawable;
    }

    /**
     * 获取图片背景选择器
     *
     * @param press  按下时的图片
     * @param normal 默认显示的图片
     * @return
     */
    public static StateListDrawable getDrawableSelector(Drawable press, Drawable normal) {
        StateListDrawable selector = new StateListDrawable();
        //按下时的图片
        selector.addState(new int[]{android.R.attr.state_pressed}, press);
        //默认图片
        selector.addState(new int[]{}, normal);
        return selector;
    }

    /**
     * 获取图片的背景选择器
     *
     * @param normalColor 默认的背景颜色
     * @param pressColor  按下时的背景颜色
     * @param radius      圆角矩形的半径
     * @return
     */
    public static StateListDrawable getDrawableSelector(int normalColor, int pressColor, float radius) {
        Drawable press = getGradientDrawable(pressColor, radius);
        Drawable normal = getGradientDrawable(normalColor, radius);
        return getDrawableSelector(press, normal);
    }
}


2.使用示例:

    Random random = new Random();
    for (int i = 0; i < mData.size(); i++) {
         TextView textView = new TextView(UIUtils.getContext());
         final String keyWord = mData.get(i);
         textView.setText(keyWord);
         //设置字体颜色
         textView.setTextColor(Color.WHITE);
         //设置字体大小和布局
         textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
         textView.setGravity(Gravity.CENTER);
         textView.setPadding(padding, padding, padding, padding);
         //创建随机颜色0-255
         int r = 30 + random.nextInt(210);//30-239
         int g = 30 + random.nextInt(210);
         int b = 30 + random.nextInt(210);
         //按下后的偏白的背景色
         int pressColor = 0xffcecece;
         //生成状态选择器
         StateListDrawable selector = DrawableUtils.getDrawableSelector(Color.rgb(r, g, b), pressColor, UIUtils.dip2px(6));
         textView.setBackgroundDrawable(selector);
         textView.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
                 Toast.makeText(UIUtils.getContext(), keyWord, Toast.LENGTH_SHORT).show();
             }
           });
          flowLayout.addView(textView);
    }



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值