本文内容摘自《疯狂Android讲义第3版》
Android系统有以下6种PathEffect效果:
- ComposePathEffect
- CornerPathEffect
- DiscretePathEffect
- DiscretePathEffect
- PathDashPathEffect
- SumPathEffect
示例代码
package shortcut.song.com.myapplication;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ComposePathEffect;
import android.graphics.CornerPathEffect;
import android.graphics.DashPathEffect;
import android.graphics.DiscretePathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathDashPathEffect;
import android.graphics.PathEffect;
import android.graphics.SumPathEffect;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class PathEffectActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_path_effect);
setContentView(new MyPathEffect(this));
}
class MyPathEffect extends View {
float phase;
PathEffect[] effects = new PathEffect[7];
int[] colors;
private Paint paint;
Path path;
public MyPathEffect(Context context) {
super(context);
paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(4);
path = new Path();
path.moveTo(0, 0);
for (int i = 1; i <= 40; i++)
{
path.lineTo(i * 20, (float)Math.random() * 60); ;
}
path.close();
colors = new int[]{Color.BLACK, Color.BLUE, Color.CYAN, Color.GREEN, Color.MAGENTA,Color.RED, Color.YELLOW};
}
@Override
protected void onDraw(Canvas canvas) {
//super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
effects[0] = null;
effects[1] = new CornerPathEffect(10);
effects[2] = new DiscretePathEffect(3.0f, 5.0f);
effects[3] = new DashPathEffect(new float[]{20, 10, 5, 10}, phase);
Path p = new Path();
p.addRect(0,0,8,8, Path.Direction.CCW);
effects[4] = new PathDashPathEffect(p, 12, phase, PathDashPathEffect.Style.MORPH);
effects[5] = new ComposePathEffect(effects[2], effects[4]);
effects[6] = new SumPathEffect(effects[4], effects[3]);
//将画布移动至(8,8)处开始绘制;
canvas.translate(8, 8);
for(int i = 0; i < effects.length; i++ )
{
paint.setPathEffect(effects[i]);
paint.setColor(colors[i]);
canvas.drawPath(path, paint);
canvas.translate(0, 60);
}
phase += 1;//改变phase的值,形成动画效果
invalidate();
}
}
}