11package com .clock .study .activity ;
22
3+ import android .animation .Animator ;
4+ import android .animation .AnimatorListenerAdapter ;
5+ import android .animation .ObjectAnimator ;
6+ import android .animation .ValueAnimator ;
7+ import android .graphics .Bitmap ;
38import android .os .Bundle ;
49import android .support .v7 .app .AppCompatActivity ;
10+ import android .util .Log ;
511import android .view .Menu ;
612import android .view .MenuInflater ;
713import android .view .MenuItem ;
14+ import android .view .View ;
15+ import android .widget .ImageView ;
16+ import android .widget .RelativeLayout ;
817
918import com .clock .study .R ;
1019
@@ -18,11 +27,26 @@ public class DayNightActivity extends AppCompatActivity {
1827
1928 private final static String TAG = DayNightActivity .class .getSimpleName ();
2029
30+ private static boolean isNight = false ;
31+
32+ private View mRootView ;
33+ /**
34+ * 切换模式时,保存界面效果用于
35+ */
36+ private ImageView mTransView ;
37+
2138 @ Override
2239 protected void onCreate (Bundle savedInstanceState ) {
2340 super .onCreate (savedInstanceState );
41+ if (isNight ) {
42+ setTheme (R .style .NightTheme );
43+ } else {
44+ setTheme (R .style .DayTheme );
45+ }
2446 setContentView (R .layout .activity_day_night );
2547
48+ initView ();
49+
2650 }
2751
2852 @ Override
@@ -36,10 +60,51 @@ public boolean onCreateOptionsMenu(Menu menu) {
3660 public boolean onOptionsItemSelected (MenuItem item ) {
3761 int itemId = item .getItemId ();
3862 if (itemId == R .id .day_mode ) {
39-
63+ isNight = false ;
64+ recreate ();
4065 } else if (itemId == R .id .night_mode ) {
41-
66+ isNight = true ;
67+ initTransBitmap ();
68+ startAnimation (mTransView );
69+ recreate ();
4270 }
4371 return super .onOptionsItemSelected (item );
4472 }
73+
74+ private void initView () {
75+ mRootView = findViewById (R .id .layout_main );
76+ mTransView = (ImageView ) findViewById (R .id .iv_trans );
77+ }
78+
79+ /**
80+ * 初始化起过渡效果用的Bitmap
81+ */
82+ private void initTransBitmap () {
83+ //开启绘制缓存,让View中的内容能够转换成为Bitmap
84+ mRootView .setDrawingCacheEnabled (true );
85+ Bitmap bitmap = mRootView .getDrawingCache ();
86+ if (bitmap != null ) {
87+ mTransView .setImageBitmap (bitmap );
88+ mTransView .setAlpha (1f );
89+ mTransView .setVisibility (View .VISIBLE );
90+ }
91+ }
92+
93+ /**
94+ * 启动过度用的动画效果
95+ */
96+ private void startAnimation (final View transView ) {
97+ ObjectAnimator animator = ObjectAnimator .ofFloat (transView , "alpha" , 1f , 0f );
98+ animator .addListener (new AnimatorListenerAdapter () {
99+ @ Override
100+ public void onAnimationEnd (Animator animation ) {
101+ super .onAnimationEnd (animation );
102+ transView .setVisibility (View .GONE );
103+ }
104+ });
105+ animator .setDuration (1000 );
106+ animator .start ();
107+
108+ }
109+
45110}
0 commit comments