Skip to content

Commit fa3d27d

Browse files
committed
1,优化完善渐变色
1 parent 892fcee commit fa3d27d

File tree

1 file changed

+40
-3
lines changed

1 file changed

+40
-3
lines changed

library/src/main/java/com/flyjingfish/gradienttextviewlib/GradientTextView.java

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public class GradientTextView extends PerfectTextView {
4646
private int curStrokeTextColor;
4747
private Paint.Join strokeJoin;
4848
private Float defaultStrokeMiter;
49+
private Shader.TileMode tileMode = Shader.TileMode.CLAMP;
50+
private OnDrawGradientListener onDrawGradientListener;
4951

5052
public GradientTextView(Context context) {
5153
this(context, null);
@@ -239,9 +241,12 @@ protected void onDraw(Canvas canvas) {
239241
}
240242
float[] xy = getAngleXY(currentAngle);
241243

242-
linearGradient = new LinearGradient(xy[0], xy[1], xy[2], xy[3], gradientStrokeColors, gradientStrokePositions, Shader.TileMode.CLAMP);
244+
linearGradient = new LinearGradient(xy[0], xy[1], xy[2], xy[3], gradientStrokeColors, gradientStrokePositions, tileMode);
243245
}else {
244-
linearGradient = new LinearGradient(0, 0,getWidth(),getHeight(), new int[]{curStrokeTextColor,curStrokeTextColor}, null, Shader.TileMode.CLAMP);
246+
linearGradient = new LinearGradient(0, 0,getWidth(),getHeight(), new int[]{curStrokeTextColor,curStrokeTextColor}, null, tileMode);
247+
}
248+
if (onDrawGradientListener != null){
249+
onDrawGradientListener.onStrokeGradient(linearGradient);
245250
}
246251
textPaint.setShader(linearGradient);
247252
super.onDraw(canvas);
@@ -255,10 +260,13 @@ protected void onDraw(Canvas canvas) {
255260
}
256261
float[] xy = getAngleXY(currentAngle);
257262

258-
linearGradient = new LinearGradient(xy[0], xy[1], xy[2], xy[3], gradientColors, gradientPositions, Shader.TileMode.CLAMP);
263+
linearGradient = new LinearGradient(xy[0], xy[1], xy[2], xy[3], gradientColors, gradientPositions, tileMode);
259264
}else {
260265
linearGradient = null;
261266
}
267+
if (onDrawGradientListener != null){
268+
onDrawGradientListener.onGradient(linearGradient);
269+
}
262270
textPaint.setShader(linearGradient);
263271
super.onDraw(canvas);
264272

@@ -489,4 +497,33 @@ public void setStrokeJoin(Paint.Join join){
489497
strokeJoin = join;
490498
invalidate();
491499
}
500+
501+
/**
502+
* 设置渐变色 {@link Shader.TileMode}
503+
* @param tileMode
504+
*/
505+
public void setTileMode(Shader.TileMode tileMode){
506+
this.tileMode = tileMode;
507+
}
508+
509+
public interface OnDrawGradientListener{
510+
/**
511+
* 回调渐变色粗边的 {@link LinearGradient}
512+
* @param gradient 渐变色 {@link LinearGradient}
513+
*/
514+
void onStrokeGradient(LinearGradient gradient);
515+
/**
516+
* 回调渐变色字体的 {@link LinearGradient}
517+
* @param gradient 渐变色 {@link LinearGradient}
518+
*/
519+
void onGradient(@Nullable LinearGradient gradient);
520+
}
521+
522+
/**
523+
* 设置绘制渐变色时的监听,在绘制之前回调渐变色 {@link LinearGradient} ,给你预留设置渐变参数的机会
524+
* @param onDrawGradientListener
525+
*/
526+
public void setOnDrawGradientListener(OnDrawGradientListener onDrawGradientListener) {
527+
this.onDrawGradientListener = onDrawGradientListener;
528+
}
492529
}

0 commit comments

Comments
 (0)