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

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

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

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

имею наработки приложения-рисовалки, там есть у меня там активити (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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2017, 22:50
Ответы с готовыми решениями:

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

Изменение фона активности
Здравствуйте, посетители форума! Захотел поменять фон активности. Добавил в RelativeLayout атрибут...

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

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

1
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 14
24.05.2017, 22:15  [ТС] 2
Задам вопрос по другому, как мне перезагрузить не всю активити, а только перезагрузить настройки?
0
24.05.2017, 22:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2017, 22:15
Помогаю со студенческими работами здесь

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

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

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

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

Контроль активности
Доменная сетка, есть необходимость на домене, который в свою очередь является так же сервером DHCP...

% активности диска
доброй ночи. Системный монитор, в нем есть поле сборщика "% активности диска" описание ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru