在画布中绘制和擦除圆圈

我是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;

    }


当我查看打印件时,数据似乎是逻辑的,我擦除并打印到好的地方......但问题仍然存在...显然我做错了什么,但经过多次搜索,我无法弄清楚它是什么。感谢您的协助。


Cats萌萌
浏览 98回答 1
1回答

炎炎设计

如果您尝试删除画布上的所有内容,则可以在方法的开头调用它:onDrawcanvas.drawColor(Color.TRANSPARENT,&nbsp;PorterDuff.Mode.CLEAR)此外,为了每秒绘制画布 60 次,只需在函数结束时调用即可。你可能不需要表面,只需使用自定义而不是,这样每次调用时都会自动清除invalidate()onDrawViewSurfaceViewonDraw
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java