你必须使用Path.Docs 说:
Path 类封装了由直线段、二次曲线和三次曲线组成的复合(多轮廓)几何路径。...
例如,您可以扩展 aview并将触摸事件位置添加到视图的方法path中onTouchEvent(MotionEvent event)。然后您必须生成与最新触摸事件相对应的随机位置并将其添加到路径的其他实例中。最后在onDraw()视图的方法中,绘制所有我希望这个片段可以帮助您理解我的想法:
public class NetCanvas extends View {
private static final double MAX_DIFF = 15;
Path path0 = new Path();
Path path = new Path();
private Paint p0;
private Paint p;
public NetCanvas(Context context) {
super(context);
p0 = new Paint();
p0.setShader(new LinearGradient(0, 0, 230, getHeight(), Color.GREEN,
Color.RED, Shader.TileMode.CLAMP));
p0.setStyle(Style.STROKE);
p = new Paint();
p.setShader(new LinearGradient(0, 0, 230, getHeight(), Color.BLUE,
Color.MAGENTA, Shader.TileMode.CLAMP));
p.setStyle(Style.STROKE);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x0 = event.getX();
float y0 = event.getY();
float x = generateFloat(event.getX());
float y = generateFloat(event.getY());
if (event.getAction() == MotionEvent.ACTION_DOWN) {
path0.moveTo(x0, y0);
path0.lineTo(x0, y0);
path.moveTo(x, y);
path.lineTo(x, y);
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
path0.lineTo(x0, y0);
path.lineTo(x, y);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
path0.lineTo(x0, y0);
path.lineTo(x, y);
}
invalidate();
return true;
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawPath(path0, p0);
canvas.drawPath(path, p);
}
private float generateFloat(Float f){
double d = (Math.signum(2*Math.random() - 1)) * Math.random() * MAX_DIFF;
return (float) (f + d);
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我使用了两个path,但你可以使用三个或更多。而且结果,取决于你的手指在屏幕上的速度。例如:

或者它可能看起来像这样:

编辑:
上面的 class( NetCanvas) 扩展了View,所以你可以创建它的实例并使用该实例,就像其他视图一样。例如,你可以简单地设置它的实例作为ContentView你的 Activity。这里我重写onCreate()Activity 的方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new NetCanvas(this));
}
Run Code Online (Sandbox Code Playgroud)
尽管您可以通过其他一些更改来NetCanvas更改扩展。SurfaceView
| 归档时间: |
|
| 查看次数: |
1644 次 |
| 最近记录: |