# TextDrawable
**Repository Path**: HarmonyOS-tpc/TextDrawable
## Basic Information
- **Project Name**: TextDrawable
- **Description**: TextDrawable
is a light-weight library provides images with letter/text like the Gmail app
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 1
- **Created**: 2021-04-15
- **Last Updated**: 2023-04-17
## Categories & Tags
**Categories**: harmonyos-textview
**Tags**: None
## README
**NOTICE:**
1.在中文路径下,Build Debug Hap(s)会失败。建议将项目放置在全英文目录下。
2.此项目中library Module类型为Java Library,下载导入后需修改/library/build.gradle中的sdk依赖路径方可正常编译。
```groovy
dependencies {
// dir改为自己本地sdk安装路径
compileOnly fileTree(dir: 'C:/Users/Administrator/AppData/Local/Huawei/Sdk/java/2.1.1.21/api', include: ['*.jar'])
}
```
### TextDrawable
This light-weight library provides images with letter/text like the Gmail app. It extends the `ShapeElement` class thus can be used with existing/custom/network `Image` classes. Also included is a [fluent interface](http://en.wikipedia.org/wiki/Fluent_interface) for creating shapeElements and a customizable `ColorGenerator`.
### How to use
#### install
case 1:
Generate a JAR package through the library Module and add the JAR package to the libs directory.
Add the following code in entry/gradle.build.
```gradle
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
```
case 2:
```gradle
allprojects{
repositories{
mavenCentral()
}
}
implementation 'io.openharmony.tpc.thirdlib:TextDrawable:1.0.3'
```
#### 1. Create simple tile:
```xml
```
**Note:** Specify width/height for the `Image and the `drawable` will auto-scale to fit the size.
```java
TextDrawable drawable = TextDrawable.builder()
.buildRect("A", Color.RED);
Image image = (Image) findComponentById(ResourceTable.Id_image);
image.addDrawTask(new Component.DrawTask() {
@Override
public void onDraw(Component component, Canvas canvas) {
drawable.setBounds(new Rect(0, 0, image.getWidth(), image.getHeight()));
drawable.drawToCanvas(canvas);
}
});
```
#### 2. Create rounded corner or circular tiles:
```java
TextDrawable drawable1 = TextDrawable.builder()
.buildRoundRect("A", Color.RED, 10); // radius in px
TextDrawable drawable2 = TextDrawable.builder()
.buildRound("A", Color.RED);
```
#### 3. Add border:
```java
TextDrawable drawable = TextDrawable.builder()
.beginConfig()
.withBorder(4) /* thickness in px */
.endConfig()
.buildRoundRect("A", Color.RED, 10);
```
#### 4. Modify font style:
```java
TextDrawable drawable = TextDrawable.builder()
.beginConfig()
.textColor(Color.BLACK)
.useFont(Typeface.DEFAULT)
.fontSize(30) /* size in px */
.bold()
.toUpperCase()
.endConfig()
.buildRect("a", Color.RED)
```
#### 5. Built-in color generator:
```java
ColorGenerator generator = ColorGenerator.MATERIAL; // or use DEFAULT
// generate random color
int color1 = generator.getRandomColor();
// generate color based on a key (same key returns the same color), useful for list/grid views
int color2 = generator.getColor("user@gmail.com")
// declare the builder object once.
TextDrawable.IBuilder builder = TextDrawable.builder()
.beginConfig()
.withBorder(4)
.endConfig()
.rect();
// reuse the builder specs to create multiple drawables
TextDrawable ic1 = builder.build("A", color1);
TextDrawable ic2 = builder.build("B", color2);
```
#### 6. Specify the width / height:
```xml
```
**Note:** The `Image` could use `match_content` width/height. You could set the width/height of the `drawable` using code.
```java
TextDrawable drawable = TextDrawable.builder()
.beginConfig()
.width(60) // width in px
.height(60) // height in px
.endConfig()
.buildRect("A", Color.RED);
Image image = (Image) findComponentById(ResourceTable.Id_image);
image.addDrawTask(new Component.DrawTask() {
@Override
public void onDraw(Component component, Canvas canvas) {
drawable.setBounds(new Rect(0, 0, image.getWidth(), image.getHeight()));
drawable.drawToCanvas(canvas);
}
});
```
#### 7. Other features:
1. Mix-match with other drawables. Use it in conjunction with `StateElement`, `FrameAnimationElement` etc.
2. Compatible with other views (not just `Image`). Use it as background drawable, compound drawable for `Text`, `Button` etc.
3. Use multiple letters or `unicode` characters to create interesting tiles.
