Как обновить onDraw () Java на android studio - PullRequest
1 голос
/ 20 января 2020

Итак, я только начал изучать, как создать приложение с 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);

    }
}

}

1 Ответ

0 голосов
/ 20 января 2020

Попробуйте этот код

    public class MainActivity 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();
            renderView.invalidate();
        }*/
    }


    class RenderView extends View {
        public RenderView(Context context) {
            super(context);
        }

        public void move() {
            posX++;
            //SystemClock.sleep(2);
        }

        protected void onDraw(Canvas canvas) {
            int width = getWidth();
            int height = getHeight();


            canvas.drawRGB(255, 255, 255);
            Paint ball = new Paint();
            ball.setAntiAlias(true);
            ball.setColor(getResources().getColor(R.color.colorAccent));
            ball.setStyle(Paint.Style.FILL_AND_STROKE);
            canvas.drawCircle(posX, posY, radius, ball);
            if (posX > 350) {
                posX = 300;
                posY+=10;
            }
            posX++;
            invalidate();

        }
    }
}
...