问题描述
||
我在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();
}
}