From 78e56b54baaa65c0e0b8302bb353ef2780e2a5b6 Mon Sep 17 00:00:00 2001 From: wushunlian Date: Thu, 27 Jun 2019 08:33:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0UI=E8=AE=BE=E7=BD=AE=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E5=88=9D=E5=A7=8B=E7=8A=B6=E6=80=81=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=EF=BC=8C=E6=81=A2=E5=A4=8D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../socoolby/com/clock/AnimatorManager.java | 2 - .../socoolby/com/clock/MainActivity.java | 18 ++++- .../socoolby/com/clock/ThemeUIManager.java | 32 +++++---- .../fragment/AbstractThemeUIFragment.java | 43 ++++++------ .../digit/DigitClockConfigFragment.java | 32 +++++++-- .../houranimator/HourAnimatorFragment.java | 2 +- .../simulate/SimulateClockConfigFragment.java | 66 ++++++++++++------- .../simulate/SimulateClockFragment.java | 3 +- .../socoolby/com/clock/utils/DialogUtils.java | 29 ++++++++ .../widget/animatorview/AbstractAnimator.java | 33 +++++++--- .../animator/CarrouselAnimator.java | 2 +- .../animator/DotsLineAnimator.java | 2 +- .../animatorview/animator/FishAnimator.java | 2 - .../animator/SawtoothAnimator.java | 22 +++---- .../animator/VorolayAnimator.java | 12 ++-- .../animator/textanimator/EZLedAnimator.java | 2 +- .../textanimator/EvaporateTextAnimator.java | 2 +- .../textanimator/PathEffectTextAnimator.java | 2 +- .../main/res/layout/fragment_digit_config.xml | 20 ++++-- .../res/layout/fragment_simulate_config.xml | 10 ++- 20 files changed, 230 insertions(+), 106 deletions(-) create mode 100644 app/src/main/java/clock/socoolby/com/clock/utils/DialogUtils.java diff --git a/app/src/main/java/clock/socoolby/com/clock/AnimatorManager.java b/app/src/main/java/clock/socoolby/com/clock/AnimatorManager.java index 1519da7..96d1869 100644 --- a/app/src/main/java/clock/socoolby/com/clock/AnimatorManager.java +++ b/app/src/main/java/clock/socoolby/com/clock/AnimatorManager.java @@ -45,8 +45,6 @@ public class AnimatorManager { SawtoothAnimator.NAME, WindmillAnimator.NAME, VorolayAnimator.NAME, - EZLedAnimator.NAME, - EvaporateTextAnimator.NAME, PhaserBallAnimator.NAME, CarrouselAnimator.NAME, Wave3DAnimator.NAME, diff --git a/app/src/main/java/clock/socoolby/com/clock/MainActivity.java b/app/src/main/java/clock/socoolby/com/clock/MainActivity.java index 98f45dd..7b01ed4 100755 --- a/app/src/main/java/clock/socoolby/com/clock/MainActivity.java +++ b/app/src/main/java/clock/socoolby/com/clock/MainActivity.java @@ -4,6 +4,7 @@ package clock.socoolby.com.clock; import android.annotation.SuppressLint; import android.annotation.TargetApi; +import androidx.appcompat.app.AlertDialog; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; @@ -572,7 +573,22 @@ public class MainActivity extends AppCompatActivity implements android.view.Ges if(isScreenLock()) return super.onKeyDown(keyCode, event); if (keyCode == KeyEvent.KEYCODE_BACK) { - themeUIViewModel.setClockUITypeEnum(ClockThemeUITypeEnum.NORMAL); + if(!isFullScreen()){ + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setIcon(android.R.drawable.ic_dialog_info); + builder.setTitle("温馨提示"); + builder.setMessage("确定要退出吗"); + builder.setCancelable(true); + + builder.setPositiveButton("确定", (dialog, which) -> { + MainActivity.this.finish(); + }); + builder.setNegativeButton("取消", (dialog, which) -> { + dialog.dismiss(); + }); + builder.create().show(); + } + //changeThemeUI(); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); return true; } else if (keyCode == KeyEvent.KEYCODE_MENU) { diff --git a/app/src/main/java/clock/socoolby/com/clock/ThemeUIManager.java b/app/src/main/java/clock/socoolby/com/clock/ThemeUIManager.java index 9aa1551..3824637 100644 --- a/app/src/main/java/clock/socoolby/com/clock/ThemeUIManager.java +++ b/app/src/main/java/clock/socoolby/com/clock/ThemeUIManager.java @@ -1,5 +1,7 @@ package clock.socoolby.com.clock; +import android.util.Log; + import com.openbravo.data.basic.BasicException; import org.json.JSONException; @@ -28,6 +30,8 @@ public class ThemeUIManager{ SharePerferenceModel model; + private String tempThemeStr=null; + public ThemeUIManager(EntityManager entityManager,SharePerferenceModel model) { this.entityManager = entityManager; this.model=model; @@ -137,17 +141,23 @@ public class ThemeUIManager{ return entityManager.isExistByFields(ThemeUI.class,new String[]{ThemeUI.NAME,ThemeUI.CLOCK_TYPE},new Object[]{name,type}); } - public String clobToString(Clob sc) throws SQLException, IOException { - String reString = ""; - Reader is = sc.getCharacterStream(); - BufferedReader br = new BufferedReader(is); - String s = br.readLine(); - StringBuffer sb = new StringBuffer(); - while (s != null) { - sb.append(s); - s = br.readLine(); + public void saveTempThemeUI(int type){ + Log.d(TAG,"save temp ThemeUI type:"+type); + if(type==ClockInterfaceTypeEnum.Digit.code) + this.tempThemeStr=makeSaveDigitThemeString(model.getDigitPerferenceModel()); + else + this.tempThemeStr=makeSaveSimulateThemeString(model.getSimulatePerferenceModel()); + } + + public void recoverTempThemeUI(int type)throws BasicException{ + Log.d(TAG,"recover temp ThemeUI type"+type); + if(tempThemeStr==null) + return; + if(type==ClockInterfaceTypeEnum.Digit.code) { + loadDigitTheme(tempThemeStr); + } + else { + loadSimulateTheme(tempThemeStr); } - reString = sb.toString(); - return reString; } } diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractThemeUIFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractThemeUIFragment.java index a32a65f..1191d03 100644 --- a/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractThemeUIFragment.java +++ b/app/src/main/java/clock/socoolby/com/clock/fragment/AbstractThemeUIFragment.java @@ -83,6 +83,19 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O MainActivity mainActivity; + private SharePerferenceModel model; + + private boolean autoFullScreen=false; + + private int runDelaySecond=10000; + + private boolean running=false; + + private Timer timer=null; + + private ClockStateMachine clockStateMachine; + + public AbstractThemeUIFragment(int layoutId){ this.layoutId=layoutId; } @@ -176,7 +189,6 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O tv_hand_time.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { - //hand_time_visable=false; tv_hand_time.setVisibility(View.GONE); return true; } @@ -258,17 +270,6 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O return themeRootView; } - private SharePerferenceModel model; - - private boolean autoFullScreen=false; - - private int runDelaySecond=10000; - - private boolean running=false; - - Timer timer=null; - - ClockStateMachine clockStateMachine; private void autoFullScreenCheck(){ if(!autoFullScreen) @@ -293,13 +294,6 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O private void bindViewModel() { - /*themeUIViewModel.getThemeName().observe(mainActivity, new Observer() { - @Override - public void onChanged(String s) { - switchThemeType(s); - } - });*/ - themeUIViewModel.getClockUITypeEnum().observe(mainActivity, new Observer() { @Override public void onChanged(ClockThemeUITypeEnum uiTypeEnum) { @@ -389,6 +383,8 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O tv_day.setText(s); } }); + + globalViewModel.getSrceenLock().observe(mainActivity,locked->screenLock(locked)); } @@ -481,7 +477,7 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public void onClick(View view) { - if (isScreenLock() && view.getId() != R.id.tv_screen_lock && view.getId() != R.id.tv_handup_image) { + if (isScreenLock() && view.getId() != R.id.tv_screen_lock) { return; } switch (view.getId()) { @@ -511,18 +507,17 @@ public abstract class AbstractThemeUIFragment extends Fragment implements View.O calendarPopup.setCurrentDay(); break; case R.id.tv_weather: - if (weatherPopup == null) - weatherPopup = new WeatherPopup(mainActivity); if(mainActivity.weatherAdape==null) { Toast.makeText(getActivity(),"天气数据获取失败,请检查网络",Toast.LENGTH_SHORT).show(); return; } + if (weatherPopup == null) + weatherPopup = new WeatherPopup(mainActivity); weatherPopup.init(mainActivity.weatherAdape.getWeatherList(), model.getCity() + " PM2.5 : " + mainActivity.weatherAdape.getmPM25()); weatherPopup.showPopupWindow(); break; case R.id.tv_screen_lock: - globalViewModel.setSrceenLock(!isScreenLock()); - screenLock(!isScreenLock()); + globalViewModel.setSrceenLock(!globalViewModel.getSrceenLock().getValue()); break; case R.id.tv_break: clockStateMachine.countingCheck(); 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 29b9770..4134fad 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 @@ -13,6 +13,7 @@ import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; @@ -27,6 +28,7 @@ import clock.socoolby.com.clock.ThemeUIManager; import clock.socoolby.com.clock.fragment.simulate.SimulateClockFragment; import clock.socoolby.com.clock.pop.ColorPickerPop; import clock.socoolby.com.clock.state.ClockInterfaceTypeEnum; +import clock.socoolby.com.clock.utils.DialogUtils; import clock.socoolby.com.clock.viewmodel.DigitViewModel; import clock.socoolby.com.clock.viewmodel.GlobalViewModel; import clock.socoolby.com.clock.viewmodel.ViewModelFactory; @@ -110,6 +112,8 @@ public class DigitClockConfigFragment extends Fragment { Button tvThemeUIStyle4; @BindView(R.id.tv_textAnim_tabDigit_up) RadioButton tvTextAnimTabDigitUp; + @BindView(R.id.tv_theme_config_recover) + Button tvThemeConfigRecover; public DigitClockConfigFragment(ThemeUIManager themeUIManager) { this.themeUIManager = themeUIManager; @@ -120,6 +124,7 @@ public class DigitClockConfigFragment extends Fragment { super.onCreate(savedInstanceState); globalViewModel = ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(GlobalViewModel.class); digitViewModel = ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(DigitViewModel.class); + themeUIManager.saveTempThemeUI(ClockInterfaceTypeEnum.Digit.code); } private Unbinder unbinder; @@ -244,6 +249,15 @@ public class DigitClockConfigFragment extends Fragment { tvThemeUIStyle4.setOnLongClickListener(v -> configThemeUIStyle(4)); + tvThemeConfigRecover.setOnClickListener(v -> { + try { + themeUIManager.recoverTempThemeUI(ClockInterfaceTypeEnum.Digit.code); + reloadViewModel(); + } catch (BasicException e) { + e.printStackTrace(); + } + }); + return view; } @@ -252,10 +266,14 @@ public class DigitClockConfigFragment extends Fragment { try { if (themeUIManager.exitsThemeUIStyle(ClockInterfaceTypeEnum.Digit.code, styleName)) { themeUIManager.loadDigitThemeFromDB(styleName); - globalViewModel.loadFromModel(); - digitViewModel.loadFromModel(); - } else - Toast.makeText(getActivity(), "当前主题是空的,你可长按来保存一个主题", Toast.LENGTH_SHORT).show(); + reloadViewModel(); + } else { + DialogUtils.show(getActivity(),"温馨提示","当前主题还未设置,是否以当前主题保存.",ok->{ + if(ok) + configThemeUIStyle(order); + }); + Toast.makeText(getActivity(), "你可长按来保存一个主题", Toast.LENGTH_SHORT).show(); + } } catch (BasicException e) { e.printStackTrace(); } @@ -291,7 +309,11 @@ public class DigitClockConfigFragment extends Fragment { colorPickerDialog.show(confColors[order]); } - + private void reloadViewModel() { + globalViewModel.loadFromModel(); + digitViewModel.loadFromModel(); + loadForViewModel(); + } /** * onDestroyView中进行解绑操作 */ diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFragment.java index ce70681..b23d4af 100644 --- a/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFragment.java +++ b/app/src/main/java/clock/socoolby/com/clock/fragment/houranimator/HourAnimatorFragment.java @@ -49,7 +49,7 @@ public class HourAnimatorFragment extends Fragment { Log.d("hour Animator", "go in heartBeat Observer:"+animatorDialy); animatorDialy--; if(animatorDialy==0) { - Log.d("hour Animator", "animator dialy is out ,end animator"); + Log.d("hour Animator", "animator runDelay is out ,end animator"); globalViewModel.setTimeHourAnimatorStarting(false); animatorDialy=globalViewModel.getTimeHourAnimatordialy().getValue(); } diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockConfigFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockConfigFragment.java index 4b495e5..8dc072c 100644 --- a/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockConfigFragment.java +++ b/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockConfigFragment.java @@ -11,6 +11,7 @@ import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; @@ -24,6 +25,7 @@ import clock.socoolby.com.clock.R; import clock.socoolby.com.clock.ThemeUIManager; import clock.socoolby.com.clock.pop.ColorPickerPop; import clock.socoolby.com.clock.state.ClockInterfaceTypeEnum; +import clock.socoolby.com.clock.utils.DialogUtils; import clock.socoolby.com.clock.viewmodel.GlobalViewModel; import clock.socoolby.com.clock.viewmodel.SimulateViewModel; import clock.socoolby.com.clock.viewmodel.ViewModelFactory; @@ -93,6 +95,8 @@ public class SimulateClockConfigFragment extends Fragment { Button tvThemeUIStyle3; @BindView(R.id.tv_themeUI_style_4) Button tvThemeUIStyle4; + @BindView(R.id.tv_theme_config_recover) + Button tvThemeConfigRecover; private Unbinder unbinder; @@ -107,6 +111,7 @@ public class SimulateClockConfigFragment extends Fragment { super.onCreate(savedInstanceState); globalViewModel = ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(GlobalViewModel.class); simulateViewModel = ViewModelProviders.of(getActivity(), new ViewModelFactory(ClockApplication.getInstance().getModel())).get(SimulateViewModel.class); + themeUIManager.saveTempThemeUI(ClockInterfaceTypeEnum.Simulate.code); } @Override @@ -232,45 +237,58 @@ public class SimulateClockConfigFragment extends Fragment { }); }); - tvThemeUIStyle1.setOnClickListener(v->changeThemeUIStyle(1)); + tvThemeUIStyle1.setOnClickListener(v -> changeThemeUIStyle(1)); - tvThemeUIStyle2.setOnClickListener(v->changeThemeUIStyle(2)); + tvThemeUIStyle2.setOnClickListener(v -> changeThemeUIStyle(2)); - tvThemeUIStyle3.setOnClickListener(v->changeThemeUIStyle(3)); + tvThemeUIStyle3.setOnClickListener(v -> changeThemeUIStyle(3)); - tvThemeUIStyle4.setOnClickListener(v->changeThemeUIStyle(4)); + tvThemeUIStyle4.setOnClickListener(v -> changeThemeUIStyle(4)); - tvThemeUIStyle1.setOnLongClickListener(v->configThemeUIStyle(1)); + tvThemeUIStyle1.setOnLongClickListener(v -> configThemeUIStyle(1)); - tvThemeUIStyle2.setOnLongClickListener(v->configThemeUIStyle(2)); + tvThemeUIStyle2.setOnLongClickListener(v -> configThemeUIStyle(2)); - tvThemeUIStyle3.setOnLongClickListener(v->configThemeUIStyle(3)); + tvThemeUIStyle3.setOnLongClickListener(v -> configThemeUIStyle(3)); - tvThemeUIStyle4.setOnLongClickListener(v->configThemeUIStyle(4)); + tvThemeUIStyle4.setOnLongClickListener(v -> configThemeUIStyle(4)); + tvThemeConfigRecover.setOnClickListener(v-> { + try { + themeUIManager.recoverTempThemeUI(ClockInterfaceTypeEnum.Simulate.code); + reloadViewModel(); + } catch (BasicException e) { + e.printStackTrace(); + } + }); return view; } - private void changeThemeUIStyle(int order){ - String styleName="simulate_style_"+order; + private void changeThemeUIStyle(int order) { + String styleName = "simulate_style_" + order; try { - if(themeUIManager.exitsThemeUIStyle(ClockInterfaceTypeEnum.Simulate.code,styleName)){ + if (themeUIManager.exitsThemeUIStyle(ClockInterfaceTypeEnum.Simulate.code, styleName)) { + themeUIManager.loadSimulateThemeFromDB(styleName); - globalViewModel.loadFromModel(); - simulateViewModel.loadFromModel(); - }else - Toast.makeText(getActivity(),"当前主题是空的,你可长按来保存一个主题",Toast.LENGTH_SHORT).show(); + reloadViewModel(); + } else { + DialogUtils.show(getActivity(),"温馨提示","当前主题还未设置,是否以当前主题保存.", ok->{ + if(ok) + configThemeUIStyle(order); + }); + Toast.makeText(getActivity(), "你可长按来保存一个主题", Toast.LENGTH_SHORT).show(); + } } catch (BasicException e) { e.printStackTrace(); } } - private boolean configThemeUIStyle(int order){ - String styleName="simulate_style_"+order; + private boolean configThemeUIStyle(int order) { + String styleName = "simulate_style_" + order; try { themeUIManager.saveSimulateThemeFromModel(styleName); - Toast.makeText(getActivity(),"当前主题已保存",Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), "当前主题已保存", Toast.LENGTH_SHORT).show(); } catch (BasicException e) { e.printStackTrace(); } @@ -285,9 +303,13 @@ public class SimulateClockConfigFragment extends Fragment { colorPickerDialog.show(defColor); } + private void reloadViewModel(){ + globalViewModel.loadFromModel(); + simulateViewModel.loadFromModel(); + } private void bindViewModel() { - globalViewModel.getForegroundColor().observe(this,integer -> setTextColor(integer)); + globalViewModel.getForegroundColor().observe(this, integer -> setTextColor(integer)); } /** @@ -331,8 +353,8 @@ public class SimulateClockConfigFragment extends Fragment { textView4.setTextColor(color); textView5.setTextColor(color); - tvSimulateTextShowHide.setTextColor(color); - tvSimulateTextShowAll.setTextColor(color); - tvSimulateTextShowFour.setTextColor(color); + tvSimulateTextShowHide.setTextColor(color); + tvSimulateTextShowAll.setTextColor(color); + tvSimulateTextShowFour.setTextColor(color); } } diff --git a/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockFragment.java b/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockFragment.java index 3a5ce7c..170275d 100644 --- a/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockFragment.java +++ b/app/src/main/java/clock/socoolby/com/clock/fragment/simulate/SimulateClockFragment.java @@ -65,7 +65,6 @@ public class SimulateClockFragment extends Fragment { public void onResume() { super.onResume(); clockAnimator.start(); - } @Override @@ -116,6 +115,8 @@ public class SimulateClockFragment extends Fragment { clock= ClockFactory.build(clockStyle); clockAnimator.setClock(clock); clockAnimator.setClockPointer(PointerFactory.build(simulateViewModel.getPointerTypeName().getValue())); + if(!clockAnimator.isRunning()) + clockAnimator.start(); } private void setClockPointer(String clockPointerStyle){ diff --git a/app/src/main/java/clock/socoolby/com/clock/utils/DialogUtils.java b/app/src/main/java/clock/socoolby/com/clock/utils/DialogUtils.java new file mode 100644 index 0000000..48572c9 --- /dev/null +++ b/app/src/main/java/clock/socoolby/com/clock/utils/DialogUtils.java @@ -0,0 +1,29 @@ +package clock.socoolby.com.clock.utils; + +import android.content.Context; + +import androidx.appcompat.app.AlertDialog; + +public class DialogUtils { + + public interface OkCancelSelectedLinstener { + void onReturn(boolean ok); + } + + public static void show(Context context, String title, String message, OkCancelSelectedLinstener linstener){ + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setIcon(android.R.drawable.ic_dialog_info); + builder.setTitle(title); + builder.setMessage(message); + builder.setCancelable(true); + builder.setPositiveButton("确定", (dialog, which) -> { + linstener.onReturn(true); + dialog.dismiss(); + }); + builder.setNegativeButton("取消", (dialog, which) -> { + linstener.onReturn(false); + dialog.dismiss(); + }); + builder.create().show(); + } +} diff --git a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/AbstractAnimator.java b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/AbstractAnimator.java index fb33942..91dd8b9 100644 --- a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/AbstractAnimator.java +++ b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/AbstractAnimator.java @@ -19,7 +19,15 @@ import java.util.ArrayList; import java.util.Random; public abstract class AbstractAnimator implements I_Animator{ - protected Random rand=new Random(); + + protected Random rand=new Random(){ + @Override + public int nextInt(int bound) { + if(bound==0) + return 0; + return super.nextInt(bound); + } + }; protected boolean isRuning=false; protected int color= Color.BLACK; @@ -42,22 +50,30 @@ public abstract class AbstractAnimator implements I_A protected Paint mPaint=new Paint(); + protected int delayRunLoopTime =0; + + protected int runDelay; + public AbstractAnimator(int entryQuantity) { this.entryQuantity = entryQuantity; } + public AbstractAnimator(int entryQuantity,int delayRunLoopTime) { + this.entryQuantity = entryQuantity; + this.delayRunLoopTime = delayRunLoopTime; + } + @Override public void init(Context context, final View main) { mainView=main; this.context=context; width=main.getWidth(); height=main.getHeight(); - if(width==0||height==0) - width=height=10; } @Override public void start() { + runDelay =0; if(animator==null) { init(); //初始化animator @@ -89,18 +105,17 @@ public abstract class AbstractAnimator implements I_A list.add(createNewEntry()); } - private int dialy=0; public boolean run(){ - if(dialy-->0) + if(runDelay-->0) return false; - dialy=dialyTime(); + runDelay = delayTime(); for(T entry:list) entry.move(width,height); return true; } - public int dialyTime(){ - return 0; + public int delayTime(){ + return delayRunLoopTime; } @Override @@ -113,6 +128,7 @@ public abstract class AbstractAnimator implements I_A public void setRandColor(boolean randColor){ this.randColor=randColor; + runDelay =0; } protected void randomColorIfAble(){ @@ -185,6 +201,7 @@ public abstract class AbstractAnimator implements I_A mPaint.setColor(color); for(T entry:list) entry.setAnimatorEntryColor(color); + runDelay =0; } @Override diff --git a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/CarrouselAnimator.java b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/CarrouselAnimator.java index b9101cf..76669e3 100644 --- a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/CarrouselAnimator.java +++ b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/CarrouselAnimator.java @@ -25,7 +25,7 @@ public class CarrouselAnimator extends AbstractAnimator } @Override - public int dialyTime() { + public int delayTime() { return SLEEP_TIME; } diff --git a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/FishAnimator.java b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/FishAnimator.java index 706fa1b..69612a8 100644 --- a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/FishAnimator.java +++ b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/FishAnimator.java @@ -34,8 +34,6 @@ public class FishAnimator extends AbstractAnimator { @Override public Fish createNewEntry() { - if(width<=0) - width=height=100; return new Fish(rand.nextInt(width),rand.nextInt(height),0); } diff --git a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/SawtoothAnimator.java b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/SawtoothAnimator.java index 6e36d0c..17a527f 100644 --- a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/SawtoothAnimator.java +++ b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/SawtoothAnimator.java @@ -27,7 +27,7 @@ public class SawtoothAnimator extends AbstractAnimator { final static private boolean DEF_BORDER_CORNERS_ROUND = true; final static private int DEF_GENERATION_TYPE = GENERATION_TYPE_RANDOM; - int delay; int regionsCount; public VorolayAnimator( ) { @@ -53,9 +52,8 @@ public class VorolayAnimator extends AbstractAnimator { } public VorolayAnimator(int regionsCount,int delay) { - super(1); + super(1,delay); this.regionsCount=regionsCount; - this.delay=delay; } public VorolayAnimator(int regionsCount) { @@ -63,8 +61,8 @@ public class VorolayAnimator extends AbstractAnimator { } @Override - public int dialyTime() { - return delay; + public int delayTime() { + return delayRunLoopTime; } @Override @@ -166,7 +164,6 @@ public class VorolayAnimator extends AbstractAnimator { mRegions = mVoronoi.getRegions(); } - /* * * Points generation methods @@ -277,8 +274,7 @@ public class VorolayAnimator extends AbstractAnimator { // then draw borders if (mBorderEnabled) { - if (randColor) - randomColorIfAble(); + randomColorIfAble(); p.setColor(color); canvas.drawPath(region.path, p); } diff --git a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/textanimator/EZLedAnimator.java b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/textanimator/EZLedAnimator.java index fd6f8d3..f3b3bcf 100644 --- a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/textanimator/EZLedAnimator.java +++ b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/textanimator/EZLedAnimator.java @@ -55,7 +55,7 @@ public class EZLedAnimator extends AbstractAnimator { private int textSize=10; @Override - public int dialyTime() { + public int delayTime() { return 20; } diff --git a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/textanimator/EvaporateTextAnimator.java b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/textanimator/EvaporateTextAnimator.java index e3cfe97..312a8a4 100644 --- a/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/textanimator/EvaporateTextAnimator.java +++ b/app/src/main/java/clock/socoolby/com/clock/widget/animatorview/animator/textanimator/EvaporateTextAnimator.java @@ -29,7 +29,7 @@ public class EvaporateTextAnimator extends AbstractAnimator @@ -46,16 +50,23 @@ android:id="@+id/tv_secoundShow" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_weight="1" + android:layout_weight="2" android:text="秒显" /> +