Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
MSC2
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 12
1

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

22.05.2017, 22:50. Просмотров 274. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2017, 22:50
Ответы с готовыми решениями:

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

Отслеживание активности
В java не смыслю ни чего не разу его даже не видел. Интересует как такие вещи как антивирус или...

Эффект затемнения активности
Возможно ли сделать, чтобы при открытии AlertDialog или PopupWindow фоновое активити затемнялось...

Закрытие второй активности
Здравствуйте, есть приложение с двумя активностями. Я захожу во вторую активность ...

Сохранение состояния активности
Всем привет, в ходе разработки клиента для сервера возник такой вопрос, можно ли сохранить...

1
MSC2
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 12
24.05.2017, 22:15  [ТС] 2
Задам вопрос по другому, как мне перезагрузить не всю активити, а только перезагрузить настройки?
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2017, 22:15

NullPointerException в дополнительной активности
Доброй ночи. Постараюсь сразу изложить проблему. Есть код, который через php-прослойку, по ссылке,...

Вызов активности android
в начале метода onCreate() в MainActivity вызываю 2-е активити через intent, которое должно...

Запуск активности из фрагмента
Доброго всем. Возникла такая проблема, для запуска активности хоста из фрагмента по нажатию...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.