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

原创 2015年11月20日 21:58:54

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



版权声明:本文为博主原创文章,未经博主允许不得转载。

Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)

FragmentTabDemo.java import java.util.ArrayList; import java.util.List; import android.os.Bundle; ...

FragmentTabHost实现底部导航栏和顶部滑动导航

使用V4包的FragmentTabHost实现底部导航栏和顶部滑动导航效果,可用于eclipse等不方便使用TabLayout的场景...

不用css样式表和背景图片实现圆角矩形,超简洁!

当网站页面的整体布局设计好后,接下来有很多细节的实现是很让人头疼的。其中之一就是圆角矩形的实现。 在网上看了很多圆角矩形的实现方法,基本有两种,一种是用纯css实现,不需要背景图片;另一种是用背...
  • aerchi
  • aerchi
  • 2012年03月31日 13:13
  • 2569

[持续更新]CSS3学习笔记(一)伪类选择器&自定义字体&背景图片

CSS3学习笔记 1.  伪类选择器 CSS3之前的伪类共有::hover,:active, :visited, :link, :first-child, :lang这六种。 CSS3新增了许多选择...

渐变背景色的圆角矩形Label[C#]

  • 2010年04月25日 11:19
  • 68KB
  • 下载

更改Calendar的背景图片(使用系统图片选择器)

最近在给媳妇做一个万能的记事本玩,之前的公司做过一个android的应用,但已经忘记的差不多了,基本上属于现学现做,stackoverflow... 应用的主界面是一个日历,我按照网上提供的说法,...

android代码实现圆角布局及selector背景选择

代码设置圆角布局 代码设置背景选择selector,

Android开发笔记之代码动态生成图片状态选择器

用代码动态生成图片状态选择器(背景颜色还可以有渐变的效果)import android.graphics.drawable.Drawable; import android.graphics.draw...

android圆角矩形背景

Android平台 使用方便 StateRoundRectDrawable mRoundRectDradable = new StateRoundRectDrawable(int normalCo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何通过代码创建圆角矩形和图片背景选择器
举报原因:
原因补充:

(最多只允许输入30个字)