2011-04-12 65 views
0

我在Android中用畫布繪製圖形,但我想將它移到左側或右側。我不想滾動它,我只是想將它移動到一個頁面中,通過它你可以看到圖形正在變化。 如果有任何機構幫助我,我將不勝感激。如何在Android的畫布中移動圖形

+0

「在一個頁面,通過它可以看到圖表移活潑接班」這句話需要一些工作,我不知道你想要說什麼。一些源代碼也可能有幫助。 – Ralphleon 2011-04-12 22:26:21

回答

0

我在尋找這個問題的答案。我有一個解決方案,但它會減慢並使用大量的CPU時間。我繪製了兩個寬度爲200像素的圖形,並將這些值存儲在一個數組中。我只是移動數組中的值並將它們移動到路徑中。 我會很高興有一個解決方案,畫布在左邊移動1個像素,第200個列用新值繪製。兩條路徑都是空的,需要大約2ms(Droid Incredible)來繪製路徑。當2條路徑填滿時,可能需要超過40ms。這將仍然是25fps,但我想同時運行其他線程,並且不想浪費CPU時間。 這是源代碼。

public class OSCI extends View

{ Integer[] codebuffer = new Integer[200]; Integer[] codebuffer1 = new Integer[200]; private static final String TAG = "MyActivity"; long start; int code=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); Arrays.fill(codebuffer1, 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, 0, 199); codebuffer[199] = value; System.arraycopy(codebuffer1, 1, codebuffer1, 0, 199); codebuffer1[199] = valuew; invalidate(); }

}

+0

非常感謝您的解決方案。你可以讓我知道你在哪裏調用newValue(int value,int valuew)方法。 – ScorpionGroup 2011-05-01 15:24:54

+0

謝謝你的回答,但我有兩個問題。第一次在代碼中調用newValue(int value,int valuew)方法時。其次,要看移位運動,你是在使用線程還是時間,以及你如何使用它。 – ScorpionGroup 2011-05-05 20:50:37