/
arti4
/
IndividualProject
Обзор
Документация
Войти
/
arti4
/
IndividualProject
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
MyGame/app/src/main/java/com/example/mygame/InstructionsActivity.java
179 строк
5 KB
arti4
upload files
18 ноя 2025, 12:41
18 ноя 2025, 12:41
f3a2f8a
Код
Авторство
О чём код?
package com.example.mygame; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Canvas; import android.os.Bundle; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.RelativeLayout; import androidx.activity.OnBackPressedCallback; import androidx.appcompat.app.AppCompatActivity; public class InstructionsActivity extends AppCompatActivity { private BackgroundLayer backgroundLayer; private MenuBackgroundView backgroundView; private MenuThread menuThread; private float cameraX = 0f; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_instructions); RelativeLayout rootLayout = findViewById(R.id.rootLayout); if (rootLayout != null) { backgroundView = new MenuBackgroundView(this); rootLayout.addView(backgroundView, 0); } DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int screenWidth = displayMetrics.widthPixels; int screenHeight = displayMetrics.heightPixels; backgroundLayer = new BackgroundLayer(this, screenWidth, screenHeight, 1.0f); if (backgroundView != null) { backgroundView.setBackgroundLayer(backgroundLayer); } setupBackButton(); setupBackPressedHandler(); } @Override protected void onResume() { super.onResume(); startMenuAnimation(); } @Override protected void onPause() { super.onPause(); stopMenuAnimation(); } @Override protected void onDestroy() { super.onDestroy(); stopMenuAnimation(); if (backgroundLayer != null) { backgroundLayer.release(); } } private void startMenuAnimation() { if (menuThread == null) { menuThread = new MenuThread(); menuThread.setRunning(true); menuThread.start(); } } private void stopMenuAnimation() { if (menuThread != null) { menuThread.setRunning(false); menuThread = null; } } private void setupBackButton() { Button backButton = findViewById(R.id.backButton); backButton.setOnClickListener(v -> goBackToMainMenu()); } private void setupBackPressedHandler() { getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { goBackToMainMenu(); } }); } private void goBackToMainMenu() { finish(); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } private class MenuThread extends Thread { private boolean running; private long lastTime = System.currentTimeMillis(); public void setRunning(boolean running) { this.running = running; } @Override public void run() { while (running) { long currentTime = System.currentTimeMillis(); long elapsedTime = currentTime - lastTime; cameraX += 0.5f; if (backgroundLayer != null) { backgroundLayer.update(cameraX); } runOnUiThread(new Runnable() { @Override public void run() { if (backgroundView != null) { backgroundView.setCameraX(cameraX); backgroundView.invalidate(); } } }); try { Thread.sleep(16); } catch (InterruptedException e) { e.printStackTrace(); } lastTime = currentTime; } } } private static class MenuBackgroundView extends View { private BackgroundLayer backgroundLayer; private float cameraX = 0f; public MenuBackgroundView(Context context) { super(context); } public MenuBackgroundView(Context context, AttributeSet attrs) { super(context, attrs); } public MenuBackgroundView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void setBackgroundLayer(BackgroundLayer backgroundLayer) { this.backgroundLayer = backgroundLayer; } public void setCameraX(float cameraX) { this.cameraX = cameraX; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (backgroundLayer != null) { backgroundLayer.draw(canvas, cameraX); } } } }