/
arti4
/
IndividualProject
Обзор
Документация
Войти
/
arti4
/
IndividualProject
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
MyGame/app/src/main/java/com/example/mygame/SettingsActivity.java
274 строки
9 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 android.widget.SeekBar; import android.widget.TextView; import androidx.activity.OnBackPressedCallback; import androidx.appcompat.app.AppCompatActivity; public class SettingsActivity extends AppCompatActivity { private static final String PREF_NAME = "SoundSettings"; private static final String KEY_MUSIC_VOLUME = "music_volume"; private static final String KEY_EFFECTS_VOLUME = "effects_volume"; private SeekBar musicVolumeSeekBar; private SeekBar effectsVolumeSeekBar; private TextView musicVolumeText; private TextView effectsVolumeText; private BackgroundLayer backgroundLayer; private MenuBackgroundView backgroundView; private MenuThread menuThread; private float cameraX = 0f; private SoundManager soundManager; @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_settings); soundManager = createSoundManagerWithSettings(); 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); } initializeViews(); loadVolumeSettings(); setupBackButton(); setupBackPressedHandler(); } private SoundManager createSoundManagerWithSettings() { SharedPreferences prefs = getSharedPreferences("SoundSettings", Context.MODE_PRIVATE); int musicVolume = prefs.getInt("music_volume", 50); int effectsVolume = prefs.getInt("effects_volume", 50); float musicVolumeFloat = musicVolume / 100.0f; float effectsVolumeFloat = effectsVolume / 100.0f; return new SoundManager(this, musicVolumeFloat, effectsVolumeFloat); } private void initializeViews() { musicVolumeSeekBar = findViewById(R.id.musicVolumeSeekBar); effectsVolumeSeekBar = findViewById(R.id.effectsVolumeSeekBar); musicVolumeText = findViewById(R.id.musicVolumeText); effectsVolumeText = findViewById(R.id.effectsVolumeText); musicVolumeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { musicVolumeText.setText(progress + "%"); float volume = progress / 100.0f; if (soundManager != null) { soundManager.setMusicVolume(volume); } saveVolumeSettings(); } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); effectsVolumeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { effectsVolumeText.setText(progress + "%"); float volume = progress / 100.0f; if (soundManager != null) { soundManager.setEffectsVolume(volume); } saveVolumeSettings(); } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); } private void loadVolumeSettings() { SharedPreferences prefs = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); int musicVolume = prefs.getInt(KEY_MUSIC_VOLUME, 50); int effectsVolume = prefs.getInt(KEY_EFFECTS_VOLUME, 50); musicVolumeSeekBar.setProgress(musicVolume); effectsVolumeSeekBar.setProgress(effectsVolume); musicVolumeText.setText(musicVolume + "%"); effectsVolumeText.setText(effectsVolume + "%"); } private void saveVolumeSettings() { SharedPreferences prefs = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); prefs.edit() .putInt(KEY_MUSIC_VOLUME, musicVolumeSeekBar.getProgress()) .putInt(KEY_EFFECTS_VOLUME, effectsVolumeSeekBar.getProgress()) .apply(); } @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(); } if (soundManager != null) { soundManager.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 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); } } } 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); } }