为了账号安全,请及时绑定邮箱和手机立即绑定

在画布中绘制和擦除圆圈

在画布中绘制和擦除圆圈

阿晨1998 2022-07-27 19:49:14
我是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));    }}我的 ExampleSurfaceView 使用列表中的“标准化”数据绘制圆圈。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贡献1825条经验 获得超4个赞

如果您尝试删除画布上的所有内容,您可以在onDraw方法的开头调用它:

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)

此外,为了每秒绘制 60 次画布,您可以在函数invalidate()结束时调用。onDraw您可能不需要表面,只需使用自定义View而不是SurfaceView,这样每次onDraw调用时都会自动清除


查看完整回答
反对 回复 2022-07-27
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信