跟随触摸输入的绘画轨迹

Paint trail that follows touch input

我正在尝试创建一个在触摸屏幕时播放音乐的音乐板。我也希望有一条跟随用户手指的轨迹。

正如您在图片中看到的那样,我可以在屏幕上绘图,它会随着触摸而变化,但它不会消失,我只剩下一条巨大的彩色线条。

我在 android

中使用油漆 class

这是我用来绘制的代码

public class SingleTouchEventView extends View{

 private static final String DEBUG_TAG = "Velocity";
 private VelocityTracker mVelocityTracker = null;
 public Paint paint = new Paint();
 public Path path = new Path();
 int sr = 44100;
 boolean isRunning = true;

public SingleTouchEventView(Context context, AttributeSet attrs) {

super(context, attrs);


int [] mColors={0xFFFF0000,0xFFFF00FF,0xFF0000FF,0xFF00FFFF,0xFF00FF00,0xFF000000,0xFFFFFFFF,0xFFFFFF00,0xFFFF0000};
Shader s=new SweepGradient(0,0,mColors,null);
paint.setShader(s);
paint.setAntiAlias(true);
paint.setStrokeWidth(6f);
paint.setColor(Color.WHITE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);

  }

 @Override
 protected void onDraw(Canvas canvas) {
  canvas.drawPath(path, paint);
  }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  float eventX = event.getX();
  float eventY = event.getY();

case MotionEvent.ACTION_MOVE:
    path.lineTo(eventX, eventY);

调用 canvas.drawRGB() 以防 ACTION_UP 使用与您的背景颜色匹配的 RGB 颜色。您需要在 onDraw()

中引用 canvas

有两条路可以走,

II) 简单一:在较短的时间间隔内,将 canvas 与位图或作为此 canvas 原始背景的 canvas 混合。这种混合可以通过在这个 canvas 上绘制背景和一些 alpha 来完成,具体取决于您希望旧像素消失的速度。这是非常低效的,很可能很难看,但是很容易做到。

I) 右一:淡化附加了时间状态的自定义像素路径。将时间数据附加到每个像素或路径,后者更好。为元素的生命周期定义一个 threshold。使用由增量(现在 - p.time)和阈值计算的密度(alpha 通道)在 canvas 上重新绘制此 pixel/path。 1 - (now - p.time)/threshold 是一个好的开始。请注意,这更难、更高效、更理想、更可调整,而且是正确的做法。