Итак, я только начал изучать, как создать приложение с android -studio, и я пытаюсь сделать простую анимацию. Например, я думал о прыгающем шаре, но пока не могу заставить свой шар двигаться. Я не совсем понимаю, как все работает, но мне удалось нарисовать шарик на экране, теперь я хочу, чтобы мой шарик двигался, но проблема в том, что я не могу обновить свой экран (который рисуется функцией onDraw) пока он открыт, телефон просто показывает последний экран, когда все движение завершено. Я слышал, что мне нужно было использовать функцию аннулирования, но я не знаю, как ее использовать, и я попытался сделать функцию перемещения для ее использования. Я хотел бы знать, что было бы самым простым изменением в моем коде, чтобы увидеть движение мяча по экрану.
package com.example.myfirstapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import java.util.Random;
public class AnimationActivity extends AppCompatActivity {
public int posX= 300;
public int posY= 300;
public int radius= 50;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
RenderView renderView = new RenderView(this);
setContentView(renderView);
while(posX<2000) {
renderView.move();
setContentView(renderView);
}
}
class RenderView extends View {
public RenderView(Context context){
super(context);
}
public void move(){
posX=posX+1;
//SystemClock.sleep(2);
invalidate();
}
protected void onDraw(Canvas canvas) {
int width = getWidth();
int height = getHeight();
canvas.drawRGB(255, 255, 255);
Paint ball = new Paint();
ball.setAntiAlias(true);
ball.setARGB(255,255,0,0);
ball.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawCircle(posX,posY,radius,ball);
}
}
}