diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockConfigFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockConfigFragment.java index 33ed541..30cefbe 100644 --- a/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockConfigFragment.java +++ b/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockConfigFragment.java @@ -137,6 +137,8 @@ public class DigitClockConfigFragment extends Fragment { VerticalRangeSeekBar tvTimeTextPadding; @BindView(R.id.tv_textStyle_border_doubble) CheckBox tvTextStyleBorderDoubble; + @BindView(R.id.tv_time_text_basline_x) + VerticalRangeSeekBar tvTimeTextBaslineX; public DigitClockConfigFragment(ThemeUIManager themeUIManager) { this.themeUIManager = themeUIManager; @@ -174,10 +176,13 @@ public class DigitClockConfigFragment extends Fragment { tvTimeTextBaslineDown.setTickMarkTextArray(new CharSequence[]{"下", "位移", "上"}); + tvTimeTextBaslineX.setTickMarkTextArray(new CharSequence[]{"右", "位移", "左"}); + tvTimeTextSubscriptScale.setTickMarkTextArray(new CharSequence[]{"1", "秒比", "100"}); tvTimeTextPadding.setTickMarkTextArray(new CharSequence[]{"0", "间隔", "20"}); + loadForViewModel(); tvHourSystemGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @@ -185,8 +190,6 @@ public class DigitClockConfigFragment extends Fragment { public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.tv_hourSystem12: - globalViewModel.setHourSystem12(tvHourSystem12.isChecked()); - break; case R.id.tv_hourSystem24: globalViewModel.setHourSystem12(tvHourSystem12.isChecked()); break; @@ -375,6 +378,23 @@ public class DigitClockConfigFragment extends Fragment { } }); + tvTimeTextBaslineX.setOnRangeChangedListener(new OnRangeChangedListener() { + @Override + public void onRangeChanged(RangeSeekBar view, float leftValue, float rightValue, boolean isFromUser) { + digitViewModel.setBaseLineX(new Float(leftValue - 100).intValue()); + } + + @Override + public void onStartTrackingTouch(RangeSeekBar view, boolean isLeft) { + + } + + @Override + public void onStopTrackingTouch(RangeSeekBar view, boolean isLeft) { + + } + }); + tvTimeTextSubscriptScale.setOnRangeChangedListener(new OnRangeChangedListener() { @Override public void onRangeChanged(RangeSeekBar view, float leftValue, float rightValue, boolean isFromUser) { @@ -566,6 +586,13 @@ public class DigitClockConfigFragment extends Fragment { baseLineDown = 100; tvTimeTextBaslineDown.setProgress(baseLineDown); + baseLineDown = 100f + digitViewModel.getBaseLineX().getValue(); + if (baseLineDown > 200) + baseLineDown = 200; + else if (baseLineDown < 0) + baseLineDown = 100; + tvTimeTextBaslineX.setProgress(baseLineDown); + tvTimeTextSubscriptScale.setVisibility(digitViewModel.getDisplaySecond().getValue() ? View.VISIBLE : View.GONE); tvTimeTextSubscriptScale.setProgress(digitViewModel.getSubscriptFontScale().getValue()); diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockFragment.java index ab149c5..fdea51e 100644 --- a/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockFragment.java +++ b/app/src/main/java/clock/socoolby/com/clock/fragment/digit/DigitClockFragment.java @@ -6,19 +6,13 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; -import android.os.Message; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.jeremyliao.liveeventbus.LiveEventBus; - import clock.socoolby.com.clock.ClockApplication; import clock.socoolby.com.clock.R; import clock.socoolby.com.clock.dao.base.TimeFontStyle; -import clock.socoolby.com.clock.event.ClockEvent; -import clock.socoolby.com.clock.event.ClockEventListener; import clock.socoolby.com.clock.event.EventListenerHandle; import clock.socoolby.com.clock.event.EventManger; import clock.socoolby.com.clock.state.ClockStateMachine; @@ -108,6 +102,13 @@ public class DigitClockFragment extends Fragment { } }); + digitViewModel.getBaseLineX().observe(this, new Observer() { + @Override + public void onChanged(Integer integer) { + tv_time.setBaseLineY(integer); + } + }); + digitViewModel.getLinearGradientAble().observe(this, new Observer() { @Override public void onChanged(Boolean aBoolean) { diff --git a/app/src/main/java/clock/socoolby/com/clock/model/DigitPerferenceModel.java b/app/src/main/java/clock/socoolby/com/clock/model/DigitPerferenceModel.java index b822245..aeda630 100644 --- a/app/src/main/java/clock/socoolby/com/clock/model/DigitPerferenceModel.java +++ b/app/src/main/java/clock/socoolby/com/clock/model/DigitPerferenceModel.java @@ -49,6 +49,9 @@ public class DigitPerferenceModel { protected final static String KEY_TIME_TEXT_BASELINE_DOWN= "key_time_text_baseline_down"; protected Integer baseLineDown=13; + protected final static String KEY_TIME_TEXT_BASELINE_Y= "key_time_text_baseline_y"; + protected Integer baseLineX =0; + protected final static String KEY_TIME_TEXT_SUBSCRIPT_FONT_SCALE= "key_time_text_subscript_font_scale"; protected Integer subscriptFontScale=40; @@ -78,6 +81,7 @@ public class DigitPerferenceModel { subscriptFontScale=jsonObject.optInt(KEY_TIME_TEXT_SUBSCRIPT_FONT_SCALE, 40); timeTextPadding=jsonObject.optInt(KEY_TIME_TEXT_PADDING, 2); charBackgroundBorderWithDoubble=jsonObject.optBoolean(KEY_IS_CHAR_BACKGROUND_BORDER_DUBBLE, false); + baseLineX =jsonObject.optInt(KEY_TIME_TEXT_BASELINE_Y,0); } @@ -99,6 +103,7 @@ public class DigitPerferenceModel { jsonObject.put(KEY_TIME_TEXT_SUBSCRIPT_FONT_SCALE,subscriptFontScale); jsonObject.put(KEY_TIME_TEXT_PADDING,timeTextPadding); jsonObject.put(KEY_IS_CHAR_BACKGROUND_BORDER_DUBBLE,charBackgroundBorderWithDoubble); + jsonObject.put(KEY_TIME_TEXT_BASELINE_Y, baseLineX); } public static String integerArrayToString(Integer[] fromArrays){ @@ -259,4 +264,12 @@ public class DigitPerferenceModel { public void setFontStyleSize(Integer fontStyleSize) { this.fontStyleSize = fontStyleSize; } + + public Integer getBaseLineX() { + return baseLineX; + } + + public void setBaseLineX(Integer baseLineX) { + this.baseLineX = baseLineX; + } } diff --git a/app/src/main/java/clock/socoolby/com/clock/model/SharePerferenceModel.java b/app/src/main/java/clock/socoolby/com/clock/model/SharePerferenceModel.java index 8b67605..0866827 100755 --- a/app/src/main/java/clock/socoolby/com/clock/model/SharePerferenceModel.java +++ b/app/src/main/java/clock/socoolby/com/clock/model/SharePerferenceModel.java @@ -6,12 +6,10 @@ import android.util.Log; import org.json.JSONException; import org.json.JSONObject; -import java.io.Serializable; import java.util.Timer; import java.util.TimerTask; import clock.socoolby.com.clock.Constants; -import clock.socoolby.com.clock.utils.FileUtils; public class SharePerferenceModel extends AbstractPerferenceModel { @@ -633,6 +631,15 @@ public class SharePerferenceModel extends AbstractPerferenceModel { dirtySave(); } + public Integer getBaseLineX() { + return digitPerferenceModel.getBaseLineX(); + } + + public void setBaseLineX(Integer baseLineY) { + digitPerferenceModel.setBaseLineX(baseLineY); + dirtySave(); + } + //simulate public String getSimulateClockTypeName() { diff --git a/app/src/main/java/clock/socoolby/com/clock/viewmodel/DigitViewModel.java b/app/src/main/java/clock/socoolby/com/clock/viewmodel/DigitViewModel.java index 4793478..780c9b1 100644 --- a/app/src/main/java/clock/socoolby/com/clock/viewmodel/DigitViewModel.java +++ b/app/src/main/java/clock/socoolby/com/clock/viewmodel/DigitViewModel.java @@ -48,6 +48,8 @@ public class DigitViewModel extends ViewModel { private MutableLiveData charBackgroundBorderWithDoubble=new MutableLiveData<>(); + private MutableLiveData baseLineX =new MutableLiveData<>(); + SharePerferenceModel model; @@ -74,6 +76,7 @@ public class DigitViewModel extends ViewModel { subscriptFontScale.setValue(model.getSubscriptFontScale()); timeTextPadding.setValue(model.getTimeTextPadding()); charBackgroundBorderWithDoubble.setValue(model.isCharBackgroundBorderWithDoubble()); + baseLineX.setValue(model.getBaseLineX()); } public MutableLiveData getDisplaySecond() { @@ -241,4 +244,13 @@ public class DigitViewModel extends ViewModel { this.charBackgroundBorderWithDoubble.setValue(charBackgroundBorderWithDoubble); model.setCharBackgroundBorderWithDoubble(charBackgroundBorderWithDoubble); } + + public MutableLiveData getBaseLineX() { + return baseLineX; + } + + public void setBaseLineX(Integer baseLineX) { + this.baseLineX.setValue(baseLineX); + model.setBaseLineX(baseLineX); + } } diff --git a/app/src/main/java/clock/socoolby/com/clock/widget/textview/DigitTextView.java b/app/src/main/java/clock/socoolby/com/clock/widget/textview/DigitTextView.java index f745fdb..2bd19b7 100644 --- a/app/src/main/java/clock/socoolby/com/clock/widget/textview/DigitTextView.java +++ b/app/src/main/java/clock/socoolby/com/clock/widget/textview/DigitTextView.java @@ -29,7 +29,8 @@ import clock.socoolby.com.clock.widget.textview.charanimator.Up2DownCharAnimator public class DigitTextView extends androidx.appcompat.widget.AppCompatTextView { public static final String Tag = DigitTextView.class.getSimpleName(); - float baseLineDownScale = 0; + float baseLineYScale = 0; + float baseLineXScale = 0; private LinearGradient mLinearGradient; @@ -116,7 +117,12 @@ public class DigitTextView extends androidx.appcompat.widget.AppCompatTextView { } public void setBaseLineDown(float baseLineDown) { - this.baseLineDownScale =baseLineDown; + this.baseLineYScale =baseLineDown; + layoutReflushAble=true; + } + + public void setBaseLineY(float baseLineDown) { + this.baseLineXScale =baseLineDown; layoutReflushAble=true; } @@ -254,8 +260,6 @@ public class DigitTextView extends androidx.appcompat.widget.AppCompatTextView { textSubscriptSpan = textSubscriptSpan + subscriptCharWidth * 2; } - - layoutReflushAble=false; } @@ -283,8 +287,8 @@ public class DigitTextView extends androidx.appcompat.widget.AppCompatTextView { if(layoutReflushCheck(textToDraw)) layoutReflush(textToDraw); - startX = (getWidth() - textWidth - textSubscriptSpan) / 2; - startY = (getHeight() + textBodyHight) / 2+getHeight()/2*(-baseLineDownScale /100); + startX = (getWidth() - textWidth - textSubscriptSpan) / 2+getHeight()/2*(-baseLineXScale /100); + startY = (getHeight() + textBodyHight) / 2+getHeight()/2*(-baseLineYScale /100); for (int i = 0; i < textLength; i++) { charStr = String.valueOf(textToDraw.charAt(i)); diff --git a/app/src/main/res/layout/fragment_digit_config.xml b/app/src/main/res/layout/fragment_digit_config.xml index fd54d66..3910b1e 100644 --- a/app/src/main/res/layout/fragment_digit_config.xml +++ b/app/src/main/res/layout/fragment_digit_config.xml @@ -344,7 +344,7 @@ android:layout_height="match_parent" android:layout_above="@id/text_style_group4" android:layout_below="@id/text_style_group2" - android:layout_toLeftOf="@id/tv_time_text_basline_down" + android:layout_toLeftOf="@id/tv_time_text_basline_x" android:layout_marginRight="20dp" app:rsb_mode="single" app:rsb_gravity="center" @@ -377,5 +377,24 @@ app:rsb_max="200" app:rsb_min_interval="5" /> + \ No newline at end of file