【FastDev4Android框架开发】列表头生成带文本或者字母的图片开源库TextDrawable使用和详解(二十二)

jerry Android 2015年11月26日 收藏

().前言:   

        今天我们主要来学习一下新的开源框架,TextDrawable。我们经常在一些应用通讯录中看到这样的效果,例如我们加了一个好友,但是该用户没有上传头像图片,那么应用要么默认显示一个默认头像,或者我们就可以自动根据姓名第一个字或者首字母自动生成一个图片。OK,TextDrawable框架(Github地址)就是可以解决这个问题。TextDrawable扩展自Drawable,用于生成文本或者字母的图片的轻量级库,可用于现有/自定义/网络等ImageView类,并且包含一个流接口用于创建drawables以及一个定制的ColorGenerator。效果如下:


       FastDev4Android框架项目地址:https://github.com/jiangqqlmj/FastDev4Android

().使用方法:   

       2.1.AS进行集成配置TextDrawable,使用Gradle进行导入


  1.        dependencies {
  2.         compile'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
  3. }


     2.2.创建简单的标题:



  1. <ImageViewandroid:layout_width="60dp"
  2.           android:layout_height="60dp"
  3.           android:id="@+id/image_view"/>


[].ImageView制定了widthheight,那么drawable会自动适应大小。

2.3.创建圆角



  1. TextDrawabledrawable1 = TextDrawable.builder()
  2.                 .buildRoundRect("A",Color.RED, 10); // radius in px
  3. TextDrawabledrawable2 = TextDrawable.builder()
  4.                 .buildRound("A",Color.RED);


2.4.增加圆角

   


  1. TextDrawabledrawable = TextDrawable.builder()
  2.                 .beginConfig()
  3.                     .withBorder(4) /* thicknessin px */
  4.                 .endConfig()
  5.                 .buildRoundRect("A",Color.RED, 10);


2.5.修改字体格式


  1. TextDrawabledrawable = TextDrawable.builder()
  2.                 .beginConfig()
  3.                     .textColor(Color.BLACK)
  4.                     .useFont(Typeface.DEFAULT)
  5.                     .fontSize(30) /* size in px*/
  6.                     .bold()
  7.                     .toUpperCase()
  8.                 .endConfig()
  9.                 .buildRect("a",Color.RED)


2.6.使用颜色引擎(颜色生成器)


  1. ColorGeneratorgenerator = ColorGenerator.MATERIAL; // or use DEFAULT
  2. // generate randomcolor
  3. int color1 =generator.getRandomColor();
  4. // generate colorbased on a key (same key returns the same color), useful for list/grid views
  5. int color2 =generator.getColor("user@gmail.com")
  6.  
  7. // declare thebuilder object once.
  8. TextDrawable.IBuilderbuilder = TextDrawable.builder()
  9.                 .beginConfig()
  10.                     .withBorder(4)
  11.                 .endConfig()
  12.                 .rect();
  13.  
  14. // reuse the builderspecs to create multiple drawables
  15. TextDrawable ic1 =builder.build("A", color1);
  16. TextDrawable ic2 =builder.build("B", color2);


2.7.制定宽度和高度


  1. <ImageViewandroid:layout_width="wrap_content"
  2.           android:layout_height="wrap_content"
  3.           android:id="@+id/image_view"/>


[].这边的ImageView采用自使用width/height,可以使用编码来设置drawable的width/heigth


  1. TextDrawabledrawable = TextDrawable.builder()
  2.                 .beginConfig()
  3.                     .width(60)  // width in px
  4.                     .height(60) // height in px
  5.                 .endConfig()
  6.                 .buildRect("A",Color.RED);
  7.  
  8. ImageView image =(ImageView) findViewById(R.id.image_view);
  9. image.setImageDrawable(drawable);


2.8.其他特点

  •  可以和其他drawables配合使用,和LayerDrawable,InsetDrawable,AnimationDrawable,TranstionDrawable等等结合使用。
  • 和其他视图兼容(不仅仅是ImageView),可以把它作为TextView,Button等等控件的背景图片。
  • 使用字母或者其他unicode字符来创建有趣的标题。

().使用实例:   

下面我们来具体实例:首先看一下实现的效果:


我们这边创建一个TextDrawablesTestActivity,在里面使用一个列表来分别展示11中不同的效果分别为:

  1. SAMPLE_RECT
  2. SAMPLE_ROUND_RECT
  3. SAMPLE_ROUND
  4. SAMPLE_RECT_BORDER
  5. SAMPLE_ROUND_RECT_BORDER
  6. SAMPLE_ROUND_BORDER
  7. SAMPLE_MULTIPLE_LETTERS
  8. SAMPLE_FONT
  9. SAMPLE_SIZE
  10. SAMPLE_ANIMATION
  11. SAMPLE_MISC

具体实现代码如下:


  1. packagecom.chinaztt.fda.test;
  2.  
  3. importandroid.graphics.Color;
  4. importandroid.graphics.Typeface;
  5. importandroid.graphics.drawable.AnimationDrawable;
  6. importandroid.graphics.drawable.Drawable;
  7. importandroid.os.Bundle;
  8. importandroid.view.LayoutInflater;
  9. importandroid.view.View;
  10. importandroid.view.ViewGroup;
  11. importandroid.widget.BaseAdapter;
  12. importandroid.widget.ImageView;
  13. importandroid.widget.ListView;
  14. importandroid.widget.TextView;
  15.  
  16. importcom.amulyakhare.textdrawable.TextDrawable;
  17. importcom.amulyakhare.textdrawable.util.ColorGenerator;
  18. importcom.chinaztt.fda.ui.R;
  19. importcom.chinaztt.fda.ui.base.BaseActivity;
  20.  
  21. importorg.androidannotations.annotations.AfterViews;
  22. importorg.androidannotations.annotations.EActivity;
  23. importorg.androidannotations.annotations.ItemClick;
  24. importorg.androidannotations.annotations.ViewById;
  25. importorg.w3c.dom.Text;
  26.  
  27. /**
  28.  * 当前类注释:TextDrawables 效果实例演示
  29.  * 项目名:FastDev4Android
  30.  * 包名:com.chinaztt.fda.test
  31.  * 作者:江清清 on 15/11/5 22:13
  32.  * 邮箱:jiangqqlmj@163.com
  33.  * QQ: 781931404
  34.  * 公司:江苏中天科技软件技术有限公司
  35.  */
  36. @EActivity(R.layout.text_drawables_layout)
  37. public classTextDrawablesTestActivity extends BaseActivity {
  38.     @ViewById
  39.     ListView lv_textdrawable;
  40.  
  41.     private String[] mTitles;
  42.     private LayoutInflater mLayoutInflater;
  43.  
  44.     private ColorGenerator mGenerator;
  45.     @Override
  46.     protected void onCreate(BundlesavedInstanceState) {
  47.         super.onCreate(savedInstanceState);
  48.         mTitles=newString[]{"SAMPLE_RECT"
  49.                ,"SAMPLE_ROUND_RECT","SAMPLE_ROUND"
  50.                ,"SAMPLE_RECT_BORDER","SAMPLE_ROUND_RECT_BORDER"
  51.                ,"SAMPLE_ROUND_BORDER"
  52.                ,"SAMPLE_MULTIPLE_LETTERS",
  53.                "SAMPLE_FONT","SAMPLE_SIZE","SAMPLE_ANIMATION","SAMPLE_MISC"
  54.         };
  55.         mGenerator=ColorGenerator.DEFAULT;
  56.         mLayoutInflater=getLayouInflater();
  57.  
  58.     }
  59.     @AfterViews
  60.     public void showLvDrawable(){
  61.         lv_textdrawable.setAdapter(newTextAdapter());
  62.     }
  63.  
  64.     class TextAdapter extends BaseAdapter{
  65.  
  66.         @Override
  67.         public int getCount() {
  68.             return mTitles.length;
  69.         }
  70.  
  71.         @Override
  72.         public Object getItem(int position) {
  73.             return mTitles[position];
  74.         }
  75.  
  76.         @Override
  77.         public long getItemId(int position) {
  78.             return position;
  79.         }
  80.  
  81.         @Override
  82.         public View getView(int position, ViewconvertView, ViewGroup parent) {
  83.             Hondler _Hondler=null;
  84.             if(convertView==null){
  85.                 _Hondler=new Hondler();
  86.                convertView=mLayoutInflater.inflate(R.layout.text_drawables_item_layout,null);
  87.                _Hondler.lv_item_img=(ImageView)convertView.findViewById(R.id.lv_item_img);
  88.                _Hondler.lv_item_text=(TextView)convertView.findViewById(R.id.lv_item_text);
  89.                 convertView.setTag(_Hondler);
  90.             }else
  91.             {
  92.                _Hondler=(Hondler)convertView.getTag();
  93.             }
  94.            _Hondler.lv_item_text.setText(mTitles[position]);
  95.             Drawable drawable=null;
  96.             switch (position){
  97.                 case 0:  //SAMPLE_RECT
  98.                    drawable=TextDrawable.builder().buildRect("R",Color.BLUE);
  99.                     break;
  100.                 case 1:  //SAMPLE_ROUND_RECT
  101.                    drawable=TextDrawable.builder().buildRoundRect("S",Color.CYAN,10);
  102.                     break;
  103.                 case 2:  //SAMPLE_ROUND
  104.                    drawable=TextDrawable.builder().buildRound("圆",Color.LTGRAY);
  105.                     break;
  106.                 case 3:  //SAMPLE_RECT_BORDER
  107.                    drawable=TextDrawable.builder().beginConfig()
  108.                             .withBorder(5)
  109.                             .endConfig()
  110.                            .buildRect("粗",Color.RED);
  111.                     break;
  112.                 case 4:  //SAMPLE_ROUND_RECT_BORDER
  113.                    drawable=TextDrawable.builder()
  114.                             .beginConfig()
  115.                             .withBorder(5)
  116.                             .endConfig()
  117.                            .buildRoundRect("S",Color.argb(220,122,122,1),10);
  118.                     break;
  119.                 case 5:  //SAMPLE_ROUND_BORDER
  120.                    drawable=TextDrawable.builder()
  121.                            .beginConfig().withBorder(5).endConfig()
  122.                            .buildRound("圆",Color.LTGRAY);
  123.                     break;
  124.                 case 6:  //SAMPLE_MULTIPLE_LETTERS
  125.                    drawable=TextDrawable.builder()
  126.                             .beginConfig()
  127.                             .fontSize(40)
  128.                             .toUpperCase()
  129.                             .endConfig()
  130.                            .buildRect("AK", mGenerator.getColor("AK"));
  131.                     break;
  132.                 case 7:  //SAMPLE_FONT
  133.                     drawable =TextDrawable.builder()
  134.                             .beginConfig()
  135.                            .textColor(Color.BLACK)
  136.                            .useFont(Typeface.SERIF)
  137.                             .bold()
  138.                             .toUpperCase()
  139.                             .endConfig()
  140.                            .buildRect("a", Color.RED);
  141.                     break;
  142.                 case 8:  //SAMPLE_SIZE
  143.                     drawable =TextDrawable.builder()
  144.                             .beginConfig()
  145.                            .textColor(Color.BLACK)
  146.                             .fontSize(30) /*size in px */
  147.                             .bold()
  148.                             .toUpperCase()
  149.                             .endConfig()
  150.                            .buildRect("a", Color.RED);
  151.                     break;
  152.                 case 9:  //SAMPLE_ANIMATION
  153.                     TextDrawable.IBuilderbuilder = TextDrawable.builder()
  154.                             .rect();
  155.                     AnimationDrawableanimationDrawable = new AnimationDrawable();
  156.                     for (int i = 10; i > 0;i--) {
  157.                         TextDrawable frame =builder.build(String.valueOf(i), mGenerator.getRandomColor());
  158.                        animationDrawable.addFrame(frame, 1200);
  159.                     }
  160.                    animationDrawable.setOneShot(false);
  161.                     animationDrawable.start();
  162.                    drawable=(Drawable)animationDrawable;
  163.                     break;
  164.                 case 10: //SAMPLE_MISC
  165.                    drawable=TextDrawable.builder()
  166.                            .buildRect("M", mGenerator.getColor("Misc"));
  167.                     break;
  168.             }
  169.             if(drawable!=null){
  170.                _Hondler.lv_item_img.setImageDrawable(drawable);
  171.             }
  172.             return convertView;
  173.         }
  174.     }
  175.  
  176.     final static class Hondler{
  177.         ImageView lv_item_img;
  178.         TextView lv_item_text;
  179.     }
  180.  
  181.     @ItemClick(R.id.lv_textdrawable)
  182.     public void lv_ItemClick(int position){
  183.        showToastMsgShort("点击了TextDrawable列表...");
  184.     }
  185. }


().源码分析:  

阅读整个该开源代码,其实实现这个效果只有两个类,ColorGeneratorTextDrawable。ColorGenerator为颜色生成引擎比较简单。

4.1.ColorGenerator.java


  1. packagecom.amulyakhare.textdrawable.util;
  2.  
  3. importjava.util.Arrays;
  4. importjava.util.List;
  5. importjava.util.Random;
  6.  
  7. /**
  8.  * @author amulya
  9.  * @datetime 14 Oct 2014, 5:20 PM
  10.  */
  11. public classColorGenerator {
  12.  
  13.     //使用默认颜色
  14.     public static ColorGenerator DEFAULT;
  15.     //使用物料模式颜色
  16.     public static ColorGenerator MATERIAL;
  17.     static {
  18.         DEFAULT = create(Arrays.asList(
  19.                 0xfff16364,
  20.                 0xfff58559,
  21.                 0xfff9a43e,
  22.                 0xffe4c62e,
  23.                 0xff67bf74,
  24.                 0xff59a2be,
  25.                 0xff2093cd,
  26.                 0xffad62a7,
  27.                 0xff805781
  28.         ));
  29.         MATERIAL = create(Arrays.asList(
  30.                 0xffe57373,
  31.                 0xfff06292,
  32.                 0xffba68c8,
  33.                 0xff9575cd,
  34.                 0xff7986cb,
  35.                 0xff64b5f6,
  36.                 0xff4fc3f7,
  37.                 0xff4dd0e1,
  38.                 0xff4db6ac,
  39.                 0xff81c784,
  40.                 0xffaed581,
  41.                 0xffff8a65,
  42.                 0xffd4e157,
  43.                 0xffffd54f,
  44.                 0xffffb74d,
  45.                 0xffa1887f,
  46.                 0xff90a4ae
  47.         ));
  48.     }
  49.  
  50.     private final List<Integer> mColors;
  51.     private final Random mRandom;
  52.  
  53.     //使用静态方法 来创建对象
  54.     public static ColorGeneratorcreate(List<Integer> colorList) {
  55.         return new ColorGenerator(colorList);
  56.     }
  57.     private ColorGenerator(List<Integer>colorList) {
  58.         mColors = colorList;
  59.         mRandom = newRandom(System.currentTimeMillis());
  60.     }
  61.  
  62.     //生成一个随机颜色
  63.     public int getRandomColor() {
  64.         returnmColors.get(mRandom.nextInt(mColors.size()));
  65.     }
  66.  
  67.     //获取具体的衍生
  68.     public int getColor(Object key) {
  69.         returnmColors.get(Math.abs(key.hashCode()) % mColors.size());
  70.     }
  71. }


4.2.TextDrawable进行构建生成相应的drawble,该采用构建者模式生成,根据我们的需求,来进行相应的构建组装即可。具体代码就不注释了,阅读起来很清晰的。


  1. packagecom.amulyakhare.textdrawable;
  2.  
  3. importandroid.graphics.*;
  4. importandroid.graphics.drawable.ShapeDrawable;
  5. importandroid.graphics.drawable.shapes.OvalShape;
  6. importandroid.graphics.drawable.shapes.RectShape;
  7. importandroid.graphics.drawable.shapes.RoundRectShape;
  8.  
  9. /**
  10.  * @author amulya
  11.  * @datetime 14 Oct 2014, 3:53 PM
  12.  */
  13. public classTextDrawable extends ShapeDrawable {
  14.  
  15.     private final Paint textPaint;
  16.     private final Paint borderPaint;
  17.     private static final float SHADE_FACTOR =0.9f;
  18.     private final String text;
  19.     private final int color;
  20.     private final RectShape shape;
  21.     private final int height;
  22.     private final int width;
  23.     private final int fontSize;
  24.     private final float radius;
  25.     private final int borderThickness;
  26.  
  27.     private TextDrawable(Builder builder) {
  28.         super(builder.shape);
  29.  
  30.         // shape properties
  31.         shape = builder.shape;
  32.         height = builder.height;
  33.         width = builder.width;
  34.         radius = builder.radius;
  35.  
  36.         // text and color
  37.         text = builder.toUpperCase ?builder.text.toUpperCase() : builder.text;
  38.         color = builder.color;
  39.  
  40.         // text paint settings
  41.         fontSize = builder.fontSize;
  42.         textPaint = new Paint();
  43.         textPaint.setColor(builder.textColor);
  44.         textPaint.setAntiAlias(true);
  45.        textPaint.setFakeBoldText(builder.isBold);
  46.         textPaint.setStyle(Paint.Style.FILL);
  47.         textPaint.setTypeface(builder.font);
  48.        textPaint.setTextAlign(Paint.Align.CENTER);
  49.        textPaint.setStrokeWidth(builder.borderThickness);
  50.  
  51.         // border paint settings
  52.         borderThickness =builder.borderThickness;
  53.         borderPaint = new Paint();
  54.        borderPaint.setColor(getDarkerShade(color));
  55.        borderPaint.setStyle(Paint.Style.STROKE);
  56.        borderPaint.setStrokeWidth(borderThickness);
  57.  
  58.         // drawable paint color
  59.         Paint paint = getPaint();
  60.         paint.setColor(color);
  61.  
  62.     }
  63.  
  64.     private int getDarkerShade(int color) {
  65.         return Color.rgb((int)(SHADE_FACTOR *Color.red(color)),
  66.                 (int)(SHADE_FACTOR *Color.green(color)),
  67.                 (int)(SHADE_FACTOR *Color.blue(color)));
  68.     }
  69.  
  70.     @Override
  71.     public void draw(Canvas canvas) {
  72.         super.draw(canvas);
  73.         Rect r = getBounds();
  74.  
  75.  
  76.         // draw border
  77.         if (borderThickness > 0) {
  78.             drawBorder(canvas);
  79.         }
  80.  
  81.         int count = canvas.save();
  82.         canvas.translate(r.left, r.top);
  83.  
  84.         // draw text
  85.         int width = this.width < 0 ?r.width() : this.width;
  86.         int height = this.height < 0 ?r.height() : this.height;
  87.         int fontSize = this.fontSize < 0 ?(Math.min(width, height) / 2) : this.fontSize;
  88.         textPaint.setTextSize(fontSize);
  89.         canvas.drawText(text, width / 2, height/ 2 - ((textPaint.descent() + textPaint.ascent()) / 2), textPaint);
  90.  
  91.         canvas.restoreToCount(count);
  92.  
  93.     }
  94.  
  95.     private void drawBorder(Canvas canvas) {
  96.         RectF rect = new RectF(getBounds());
  97.         rect.inset(borderThickness/2,borderThickness/2);
  98.  
  99.         if (shape instanceof OvalShape) {
  100.             canvas.drawOval(rect, borderPaint);
  101.         }
  102.         else if (shape instanceofRoundRectShape) {
  103.             canvas.drawRoundRect(rect, radius,radius, borderPaint);
  104.         }
  105.         else {
  106.             canvas.drawRect(rect, borderPaint);
  107.         }
  108.     }
  109.  
  110.     @Override
  111.     public void setAlpha(int alpha) {
  112.         textPaint.setAlpha(alpha);
  113.     }
  114.  
  115.     @Override
  116.     public void setColorFilter(ColorFilter cf){
  117.         textPaint.setColorFilter(cf);
  118.     }
  119.  
  120.     @Override
  121.     public int getOpacity() {
  122.         return PixelFormat.TRANSLUCENT;
  123.     }
  124.  
  125.     @Override
  126.     public int getIntrinsicWidth() {
  127.         return width;
  128.     }
  129.  
  130.     @Override
  131.     public int getIntrinsicHeight() {
  132.         return height;
  133.     }
  134.  
  135.     public static IShapeBuilder builder() {
  136.         return new Builder();
  137.     }
  138.  
  139.     public static class Builder implementsIConfigBuilder, IShapeBuilder, IBuilder {
  140.  
  141.         private String text;
  142.  
  143.         private int color;
  144.  
  145.         private int borderThickness;
  146.  
  147.         private int width;
  148.  
  149.         private int height;
  150.  
  151.         private Typeface font;
  152.  
  153.         private RectShape shape;
  154.  
  155.         public int textColor;
  156.  
  157.         private int fontSize;
  158.  
  159.         private boolean isBold;
  160.  
  161.         private boolean toUpperCase;
  162.  
  163.         public float radius;
  164.  
  165.         private Builder() {
  166.             text = "";
  167.             color = Color.GRAY;
  168.             textColor = Color.WHITE;
  169.             borderThickness = 0;
  170.             width = -1;
  171.             height = -1;
  172.             shape = new RectShape();
  173.             font =Typeface.create("sans-serif-light", Typeface.NORMAL);
  174.             fontSize = -1;
  175.             isBold = false;
  176.             toUpperCase = false;
  177.         }
  178.  
  179.         public IConfigBuilder width(int width){
  180.             this.width = width;
  181.             return this;
  182.         }
  183.  
  184.         public IConfigBuilder height(intheight) {
  185.             this.height = height;
  186.             return this;
  187.         }
  188.  
  189.         public IConfigBuilder textColor(intcolor) {
  190.             this.textColor = color;
  191.             return this;
  192.         }
  193.  
  194.         public IConfigBuilder withBorder(intthickness) {
  195.             this.borderThickness = thickness;
  196.             return this;
  197.         }
  198.  
  199.         public IConfigBuilder useFont(Typefacefont) {
  200.             this.font = font;
  201.             return this;
  202.         }
  203.  
  204.         public IConfigBuilder fontSize(intsize) {
  205.             this.fontSize = size;
  206.             return this;
  207.         }
  208.  
  209.         public IConfigBuilder bold() {
  210.             this.isBold = true;
  211.             return this;
  212.         }
  213.  
  214.         public IConfigBuilder toUpperCase() {
  215.             this.toUpperCase = true;
  216.             return this;
  217.         }
  218.  
  219.         @Override
  220.         public IConfigBuilder beginConfig() {
  221.             return this;
  222.         }
  223.  
  224.         @Override
  225.         public IShapeBuilder endConfig() {
  226.             return this;
  227.         }
  228.  
  229.         @Override
  230.         public IBuilder rect() {
  231.             this.shape = new RectShape();
  232.             return this;
  233.         }
  234.  
  235.         @Override
  236.         public IBuilder round() {
  237.             this.shape = new OvalShape();
  238.             return this;
  239.         }
  240.  
  241.         @Override
  242.         public IBuilder roundRect(int radius) {
  243.             this.radius = radius;
  244.             float[] radii = {radius, radius,radius, radius, radius, radius, radius, radius};
  245.             this.shape = newRoundRectShape(radii, null, null);
  246.             return this;
  247.         }
  248.  
  249.         @Override
  250.         public TextDrawable buildRect(Stringtext, int color) {
  251.             rect();
  252.             return build(text, color);
  253.         }
  254.  
  255.         @Override
  256.         public TextDrawablebuildRoundRect(String text, int color, int radius) {
  257.             roundRect(radius);
  258.             return build(text, color);
  259.         }
  260.  
  261.         @Override
  262.         public TextDrawable buildRound(Stringtext, int color) {
  263.             round();
  264.             return build(text, color);
  265.         }
  266.  
  267.         @Override
  268.         public TextDrawable build(String text,int color) {
  269.             this.color = color;
  270.             this.text = text;
  271.             return new TextDrawable(this);
  272.         }
  273.     }
  274.  
  275.     public interface IConfigBuilder {
  276.         public IConfigBuilder width(int width);
  277.  
  278.         public IConfigBuilder height(intheight);
  279.  
  280.         public IConfigBuilder textColor(intcolor);
  281.  
  282.         public IConfigBuilder withBorder(intthickness);
  283.  
  284.         public IConfigBuilder useFont(Typefacefont);
  285.  
  286.         public IConfigBuilder fontSize(intsize);
  287.  
  288.         public IConfigBuilder bold();
  289.  
  290.         public IConfigBuilder toUpperCase();
  291.  
  292.         public IShapeBuilder endConfig();
  293.     }
  294.  
  295.     public static interface IBuilder {
  296.  
  297.         public TextDrawable build(String text,int color);
  298.     }
  299.  
  300.     public static interface IShapeBuilder {
  301.  
  302.         public IConfigBuilder beginConfig();
  303.  
  304.         public IBuilder rect();
  305.  
  306.         public IBuilder round();
  307.  
  308.         public IBuilder roundRect(int radius);
  309.  
  310.         public TextDrawable buildRect(Stringtext, int color);
  311.  
  312.         public TextDrawablebuildRoundRect(String text, int color, int radius);
  313.  
  314.         public TextDrawable buildRound(Stringtext, int color);
  315.     }
  316. }

      


           我们的项目已经配置集成了TextDrawble的例子,大家以后在做通讯录相关的应用的时候列表中的图标根据根据姓名去设置了。同时欢迎大家去Github站点进行clone或者下载浏览:

https://github.com/jiangqqlmj/FastDev4Android 同时欢迎大家starfork整个开源快速开发框架项目~