关闭

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

737人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:152899次
    • 积分:2375
    • 等级:
    • 排名:第15679名
    • 原创:89篇
    • 转载:2篇
    • 译文:0篇
    • 评论:55条
    文章分类
    最新评论