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

来源:互联网 发布:阿里云英文缩写 编辑:程序博客网 时间:2024/04/30 05:57

通过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 0