package com.thankcreate.care.startup; import java.util.Date; import java.util.List; import java.util.Random; import com.thankcreate.care.App; import com.thankcreate.care.AppConstants; import com.thankcreate.care.DispatcherActivity; import com.thankcreate.care.MainActivity; import com.thankcreate.care.R; import com.thankcreate.care.R.layout; import com.thankcreate.care.R.menu; import com.thankcreate.care.password.PasswordActivity; import com.thankcreate.care.tool.misc.BlessHelper; import com.thankcreate.care.viewmodel.BlessItemViewModel; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.DisplayMetrics; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.AnimationUtils; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.ImageSwitcher; import android.widget.ImageView; import android.widget.Gallery.LayoutParams; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.ViewSwitcher.ViewFactory; public class BlessingActivity extends Activity { /** * 注意,PER_SHOW_TIME - MIX_SHOW_TIME是渐隐的时间 * 改了任何一个,都要去anim里把它改掉 */ final private int PER_SHOW_TIME = 8000; // 每张图显示的总时间 final private int MIX_SHOW_TIME = 2000; // 两张图一起显示的时间(通过alpha混合在一起) final private int SLIDE_TIME = 300; private int mBkgIndex = 0; private int mItemIndex = 0; private List<Drawable> listDrawables; List<BlessItemViewModel> listItems; private BlessHelper blessHelper; private ImageView image1; private ImageView image2; private int activeFlag; private RelativeLayout layoutEnter; private ImageView imageSlider; private TextView textName; private TextView textContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_blessing); initControl(); } private void initControl() { layoutEnter = (RelativeLayout) findViewById(R.id.blessing_enter_layout); layoutEnter.setOnClickListener(mOnClickListener); layoutEnter.setAnimation(makeSliderLayoutInitAnimation()); imageSlider = (ImageView) findViewById(R.id.blessing_enter_slider); textName = (TextView) findViewById(R.id.blessing_item_name); textContent = (TextView) findViewById(R.id.blessing_item_content); image1 = (ImageView) findViewById(R.id.blessing_image1); image2 = (ImageView) findViewById(R.id.blessing_image2); adjustImageView(image1); adjustImageView(image2); // 从缓存中加载图片和祝福项 blessHelper = new BlessHelper(); listDrawables = blessHelper.getBlessImages(this); listItems = blessHelper.getCachedBlessPassedItem(); refreshItemText(); image1.setImageDrawable(listDrawables.get(0)); image1.setAnimation(makeImageAnimation()); activeFlag = 1; mBkgIndex = ++mBkgIndex % listDrawables.size(); delayRefresh(); } private Animation makeImageAnimation() { AnimationSet res = new AnimationSet(true); DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); int adjustedHeight = (int) (metric.heightPixels * 1.2); int adjustedWidth = (int) (metric.widthPixels * 1.2); TranslateAnimation translate = new TranslateAnimation( (int) (adjustedWidth * 0.16), (int) (adjustedWidth * 0.17), (int) (adjustedHeight * 0.16), (int) (adjustedHeight * 0.17)); translate.setDuration(12000); ScaleAnimation scale = new ScaleAnimation((float)1.0, (float)0.87, (float)1.0, (float)0.87); scale.setDuration(12000); AlphaAnimation alphaStart = new AlphaAnimation(0, 1); alphaStart.setDuration(MIX_SHOW_TIME); AlphaAnimation alphaEnd = new AlphaAnimation(1, 0); alphaEnd.setStartOffset(PER_SHOW_TIME - MIX_SHOW_TIME); alphaEnd.setDuration(MIX_SHOW_TIME); res.addAnimation(translate); res.addAnimation(scale); res.addAnimation(alphaStart); res.addAnimation(alphaEnd); res.setFillAfter(true); return res; } private Animation makeTextAnimation() { Animation res = new AlphaAnimation(0,1); res.setFillAfter(true); res.setDuration(MIX_SHOW_TIME / 2); return res; } private Animation makeSliderLayoutInitAnimation() { Animation res = new AlphaAnimation(0,1); res.setFillAfter(true); res.setDuration(1000); return res; } private void refreshItemText() { BlessItemViewModel item = listItems.get(mItemIndex); textContent.setText(item.content); textContent.setAnimation(makeTextAnimation()); textName.setText("— " + item.title); textName.setAnimation(makeTextAnimation()); mItemIndex = ++mItemIndex % listItems.size(); } private void delayRefresh() { final Handler handler=new Handler(); Runnable runnable=new Runnable() { @Override public void run() { if(activeFlag == 1) { activeFlag = 2; image2.setImageDrawable(listDrawables.get(mBkgIndex)); image2.setAnimation(makeImageAnimation()); } else { activeFlag = 1; image1.setImageDrawable(listDrawables.get(mBkgIndex)); image1.setAnimation(makeImageAnimation()); } mBkgIndex = ++mBkgIndex % listDrawables.size(); refreshItemText(); handler.postDelayed(this, PER_SHOW_TIME - MIX_SHOW_TIME ); } }; handler.postDelayed(runnable, PER_SHOW_TIME - MIX_SHOW_TIME); } public void adjustImageView(ImageView i) { i.setBackgroundColor(0x00000000); i.setScaleType(ImageView.ScaleType.CENTER_CROP); DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); int adjustedHeight = (int) (metric.heightPixels * 1.2); int adjustedWidth = (int) (metric.widthPixels * 1.2); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(adjustedWidth, adjustedHeight); params.leftMargin = (int) (0 - (metric.widthPixels * 0.2)); params.topMargin = (int) (0 - (metric.heightPixels * 0.2)); i.setLayoutParams(params); } private OnClickListener mOnClickListener = new OnClickListener() { @Override public void onClick(View v) { // 做animation DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); int xDelta = (int) (metric.density * (80 - 30)); TranslateAnimation slideAnimation = new TranslateAnimation(0, xDelta, 0, 0); slideAnimation.setDuration(SLIDE_TIME); slideAnimation.setFillAfter(true); imageSlider.setAnimation(slideAnimation); // 延时做跳转 new Handler().postDelayed(new Runnable() { @Override public void run() { SharedPreferences pref = App.getAppContext().getSharedPreferences( AppConstants.PREFERENCES_NAME, Context.MODE_APPEND); final String usePassword = pref.getString("Global_UsePassword", "False"); if (usePassword.equalsIgnoreCase("True")) { Intent intent = new Intent(); intent.setClass(BlessingActivity.this, PasswordActivity.class); startActivity(intent); } // 不是第一次启动,且没有设置密码 else { Intent intent = new Intent(); intent.setClass(BlessingActivity.this, MainActivity.class); startActivity(intent); } } }, SLIDE_TIME); } }; }