@@ -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