如何在Android的Canvas中移动图形

问题描述

|| 我在Android中使用画布绘制了一个图形,但我想将其向左或向右移动。我不想滚动它,我只想将它移动一页,通过它您可以看到图形在动态变化。 如果有人帮助我,我将不胜感激。     

解决方法

我也在寻找这个问题的答案。我有一个解决方案,但是它很慢并且会占用大量CPU时间。我正在绘制两个宽度为200像素的图形,并将值存储在数组中。我只是移动数组中的值并将它们移到路径中。 我很高兴有一个解决方案,其中画布向左移动1个像素,第200列使用新值绘制。两条路径均为空时,绘制路径大约需要2毫秒(Droid Incredible)。当两个路径被填满时,可能需要40毫秒以上的时间。这样仍然可以达到25fps,但是我想同时运行其他线程,并且不想浪费CPU时间。 这是来源。 公共类OSCI扩展了View {     Integer [] codebuffer = new Integer [200];     Integer [] codebuffer1 =新的Integer [200];     私有静态最终字符串TAG = \“ MyActivity \”;     漫长的开始;     整数代码= 0;
// private static final String TAG = \"MyActivity\";
public OSCI(Context context)
{
    super(context);
    Arrays.fill(codebuffer,1);
    Arrays.fill(codebuffer1,1);
}

public OSCI(Context context,AttributeSet attrs)
{
    super(context,attrs);;
    Arrays.fill(codebuffer,1);
}

@Override
protected void onDraw(Canvas canvas)
{

    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(2);
    paint.setColor(Color.YELLOW);
    Path path = new Path();
    path.moveTo(0,70);

    Paint paint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint1.setStyle(Paint.Style.STROKE);
    paint1.setStrokeWidth(2);
    paint1.setColor(Color.GREEN);
    Path path1 = new Path();
    path1.moveTo(0,70);

    int max = Collections.max(Arrays.asList(codebuffer));
    if(max==0)max=1;
    for (int a = 0; a < codebuffer.length; a++)
    {
        if (codebuffer[a] < 0)code=0;
        code = 70 * codebuffer[a] / max;
        path.lineTo(a * 2 + 2,70 - code);
        path1.lineTo(a * 2+ 2,70 - (codebuffer1[a]));
    }
    start=(SystemClock.elapsedRealtime());
    canvas.drawPath(path1,paint);
    canvas.drawPath(path,paint1);

    Log.v(TAG,\" \"+(SystemClock.elapsedRealtime()-start));
}

public void newValue(int value,int valuew)
{

    System.arraycopy(codebuffer,1,codebuffer,199);
    codebuffer[199] = value;

    System.arraycopy(codebuffer1,codebuffer1,199);
    codebuffer1[199] = valuew;

    invalidate();
}
}