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