我是Android的新手,所以我不知道這個問題是否是基本的。我想每隔N秒在畫布上畫一圈。尋找教程,我成功地將一個圓圈畫到畫布上。但隨后問題出現了。如何擦除以前繪制的圓。我這樣做的方式可能很糟糕,事實上,我只是畫了另一個圓圈(但白色)。這意味著,每次迭代我都會畫一個白色圓圈,以擦除前一個圓圈。然后是藍色的新圓圈。它在第一次迭代中完美地工作...但是一旦我開始在我已經畫過圓圈的地方畫圓圈......事情開始出錯了...就像通過再次繪制一些以前擦除的圓圈再次出現一樣。我真的不知道如何解釋它。你可以看到執行這種代碼和平會發生什么。我的游戲活動啟動器public class GameActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Float max = new Float(200.42); ArrayList<Float> liste_test = new ArrayList<Float>(); liste_test.add(new Float(36.8)); liste_test.add(new Float(147.8)); liste_test.add(new Float(97.8)); liste_test.add(new Float(max)); liste_test.add(new Float(10)); setContentView(new ExampleSurfaceView(this,liste_test,max)); }}我的示例SurfaceView我使用列表中“規范化”的數據來繪制圓圈。public class ExampleSurfaceView extends SurfaceView implements SurfaceHolder.Callback { // Le holder SurfaceHolder mSurfaceHolder; // Le thread dans lequel le dessin se fera DrawingThread mThread; int oldPosition_x; int oldPosition_y; ArrayList<Integer> valeurs_capteurs; int nb_valeurs; public ExampleSurfaceView (Context context,ArrayList<Float> donees_capteur, Float max) { super(context); this.valeurs_capteurs=normalise(donees_capteur,max); this.nb_valeurs=this.valeurs_capteurs.size(); mSurfaceHolder = getHolder(); mSurfaceHolder.addCallback(this); mThread = new DrawingThread(); } //pour récupérer des données uniforme peu importe le capteur public ArrayList<Integer> normalise(ArrayList<Float> donnees, Float max){ valeurs_capteurs = new ArrayList<Integer>(); for (Float donnee : donnees) { int donnee_normalized= (int)((donnee/max)*100); valeurs_capteurs.add(donnee_normalized); } return valeurs_capteurs; }當我查看打印件時,數據似乎是邏輯的,我擦除并打印到好的地方......但問題仍然存在...顯然我做錯了什么,但經過多次搜索,我無法弄清楚它是什么。感謝您的協助。
1 回答

炎炎設計
TA貢獻1808條經驗 獲得超4個贊
如果您嘗試刪除畫布上的所有內容,則可以在方法的開頭調用它:onDraw
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
此外,為了每秒繪制畫布 60 次,只需在函數結束時調用即可。你可能不需要表面,只需使用自定義而不是,這樣每次調用時都會自動清除invalidate()
onDraw
View
SurfaceView
onDraw
添加回答
舉報
0/150
提交
取消