Друзья, помогите разобраться!
имею наработки приложения-рисовалки, там есть у меня там активити (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);
}
}
} |
|