通过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); } }
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); }