0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 14

Изменение настроек приложения из активности в рамках активности

22.05.2017, 22:50. Показов 1110. Ответов 1

Студворк — интернет-сервис помощи студентам
Друзья, помогите разобраться!

имею наработки приложения-рисовалки, там есть у меня там активити (mainactivity) настроек, оттуда передаются в сервис настроек (appprefences). Решил часть настроек запихать в активити (editactivity) непосредственно в которой рисуется (туда настройки уже переданы при запуске из другого сервиса (drivingview), который берет данные из сервиса настроек (замудренно, но писал не я, мне нужно изменить только это). В общем повесил сикбар изменяющий толщину линии моей рисовалки, но она меняется если только перезапустить мою активити (editactivity), где рисую (через recreate()), соответственно все что нарисовал очищается. Как мне обойти этот момент, что написать вместо recreate в сикбаре?

Код appprefences

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class AppPreferences {
 
    public static final int DEFAULT_THICKNESS = 20;
    private static AppPreferences mInstance;
    private final static Object sync = new Object();
    private int lineThickness;
 
    private AppPreferences() {
 
    }
 
 
    public static AppPreferences getInstance() {
            if(mInstance == null){
                mInstance = new AppPreferences();
            }
            return mInstance;
        }
 
        @SuppressLint("CommitPrefEdits")
        public void saveConfig() {
            synchronized (sync) {
                try {
                    SharedPreferences preferences = AppModule.applicationContext().getSharedPreferences("appconfig", Context.MODE_PRIVATE);
                    SharedPreferences.Editor editor = preferences.edit();
 
                    editor.clear();
 
                    editor.putInt("lineThickness", lineThickness);
 
                    editor.apply();
 
                } catch (Exception e) {
                    Logger.getInstance().error("AppPreferences", "failed to write config", e);
                }
            }
        }
 
        public void loadConfig() {
            synchronized (sync) {
                SharedPreferences preferences = AppModule.applicationContext().getSharedPreferences("appconfig", Context.MODE_PRIVATE);
 
                lineThickness = preferences.getInt("lineThickness", DEFAULT_THICKNESS);
 
            }
        }
 
        public int getLineThickness() {
            return lineThickness;
        }
 
        public AppPreferences setLineThickness(int value) {
            lineThickness = value;
            return this;
        }
Код drivingview

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class DrawingView extends View {
 
    private static final String TAG = DrawingView.class.getSimpleName();
 
    public interface DrawingViewHandler {
        RectF getCropingRect();
    }
 
    private Paint mPaint;
    
    private Path mPath;
    private Paint mBitmapPaint;
    private DrawingViewHandler mDrawingViewHandler;
 
 
    public DrawingView(Context context) {
        super(context);
 
        // параметры линии!!!!!!!!
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setColor(Color.parseColor("#fff000"));
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(AppPreferences.getInstance().getLineThickness()); //здесь берется толщина из настроек
 
        mPath = new Path();
        mBitmapPaint = new Paint();
        mBitmapPaint.setColor(Color.RED);
    }
 
    public void setHandler(DrawingViewHandler handler){
        mDrawingViewHandler = handler;
    }
}
Код editacrivity (где меняю настройки)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
public class EditActivity extends AppCompatActivity implements View.OnClickListener {
 
 
    public static final String EXTRA_IMAGE_PATH = EditActivity.class.getCanonicalName() + ".EXTRA_IMAGE_PATH";
    private static final String TAG = EditActivity.class.getSimpleName();
    private EditImageView mCropImageView;
    private String mFilePath = null;
    private CropOverlayView mCropOverlayView;
    private Bitmap mBitmap;
    private DrawingView mDrawingView;
    private boolean mFileHandled = false;
    TextView textView;
    SeekBar seekBar;
    TextView mLineThickness;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        if(getIntent() != null) {
            Intent intent = getIntent();
            if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
                // The activity was launched from history
                done(true);
            }
        }
 
        Stopwatch timer = Stopwatch.createStarted();
        setContentView(R.layout.activity_edit);
        seekBar = (SeekBar) findViewById(R.id.seekBarse);
        textView = (TextView) findViewById(R.id.textViewse);
        seekBar.setMax(200);
        final AppPreferences appPreferences = AppPreferences.getInstance();
        appPreferences.loadConfig();
        textView.setText(String.valueOf(appPreferences.getLineThickness()));
        seekBar.setProgress(Integer.parseInt(textView.getText().toString()));
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                mLineThickness.setText(String.valueOf(progress));
                    }
 
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
 
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                recreate();//перезапуск активити, нужно изменить только толщину линии
        }
        });
 
        mLineThickness = (TextView) findViewById(R.id.textViewse);
        mLineThickness.setText(String.valueOf(appPreferences.getLineThickness()));
        mLineThickness.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { }
            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { }
            @Override
            public void afterTextChanged(Editable editable) {
                String value = editable.toString();
                if("".equals(value)){
                    AppPreferences.getInstance()
                            .setLineThickness(AppPreferences.DEFAULT_THICKNESS)
                            .saveConfig();
                } else {
                    try {
                        int thickness = Integer.parseInt(value);
                        AppPreferences.getInstance()
                                .setLineThickness(thickness)
                                .saveConfig();
 
                    } catch (NumberFormatException exception){
                        editable.clear();
                        Log.e(TAG, "thickness failed", exception);
                    }
                }
            }
        });
        
        
        mCropImageView.setGuidelines(CropImageView.Guidelines.OFF);
        mCropOverlayView = (CropOverlayView) mCropImageView.findViewById(R.id.CropOverlayView);
        if(getIntent() != null){
            mFilePath = getIntent().getStringExtra(EXTRA_IMAGE_PATH);
            if(!"".equals(mFilePath)){
                BitmapFactory.Options options = new BitmapFactory.Options();
               
                mDrawingView = new DrawingView(this);//по идее здесь берутся параметры
                mDrawingView.setHandler(new DrawingView.DrawingViewHandler() {
                    @Override
                    public RectF getCropingRect() {
                        RectF cropWindowRect = mCropOverlayView.getCropWindowRect();
                        return cropWindowRect;
                    }
                });
                mCropImageView.addView(mDrawingView);
            }
 
        }
 
        timer.stop();
        Logger.getInstance().debug(TAG, "activity created in " + timer);
    }
 
 
    }
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.05.2017, 22:50
Ответы с готовыми решениями:

Мониторинг активности пользователей -> Монитор активности в Интернет
Пишу дипломную на тему "Мониторинг активности пользователей". Кейлоггеры всякие, скриннеры, мониторы процессов, действий и т.д. Хотелось бы...

Изменение фона активности
Здравствуйте, посетители форума! Захотел поменять фон активности. Добавил в RelativeLayout атрибут background="@drawable/bg" - не...

Проверка активности приложения
Здравствуйте уважаемые Товарисчи. Возникла проблема такого характера, у меня в наличии есть многооконное приложение, и хотелось бы иметь...

1
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 14
24.05.2017, 22:15  [ТС]
Задам вопрос по другому, как мне перезагрузить не всю активити, а только перезагрузить настройки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2017, 22:15
Помогаю со студенческими работами здесь

Изменение активности кнопки по TextBox
Собственно нужно чтобы в первом случае кнопка становилась активной после ввода в текстбокс букв)) во втором случае почти тоже самое,...

Мониторинг сетевой активности приложения
День добрый. И так, по порядку. Есть потребность отловить входящие соединения определенного приложения. Написал небольшую программку...

Мониторинг файловой активности приложения
Доброго времени суток. Возможно ли с узнать, к каким файлам обращается конкретный процесс? В Линуксе есть похожая библиотека -...

Перехват сетевой активности собственного приложения
Всем привет!) Итак, вопрос. Можно ли следить за запросами, отправляемыми собственным приложением? Т.е. одна часть проги работает с...

Определение активности приложения и совершаются ли в нём действия
Добрый вечер. Подскажите пожалуйста как определить совершаются ли какие либо действия в приложении? Пробовал так. на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru