package cn.crane.framework.view; import java.util.ArrayList; import java.util.List; import cn.crane.framework.adapter.PageItemAdapter; import android.app.Activity; import android.content.Context; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.widget.FrameLayout; import android.widget.FrameLayout.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RadioGroup; import android.widget.RelativeLayout; /** * * @author Ruifeng.yu Email:xyyh0116@aliyun.com * * @date 2014-10-29 */ public class Splash { private FrameLayout baseView; private ViewPager mViewPager; private LinearLayout llDots; private PageItemAdapter pageItemAdapter; private List<View> arrViews; private int iCurrentPage; private Context context; private int [] resIds; private int dotResId1; private int dotResId2; private float fDensity; private OnSpalshDismissListener onSpalshDismissListener; public void setOnSpalshDismissListener( OnSpalshDismissListener onSpalshDismissListener) { this.onSpalshDismissListener = onSpalshDismissListener; } /** * Constructor * @param context * @param resIds * @param resDotselector */ public Splash(Context context) { super(); this.context = context; this.fDensity = context.getResources().getDisplayMetrics().density; } public void setResIds(int[] drawableIds, int dotResId1, int dotResId2) { this.resIds = drawableIds; this.dotResId1 = dotResId1; this.dotResId2 = dotResId2; initViews(); } private void initViews() { arrViews = new ArrayList<View>(); baseView = new FrameLayout(context); mViewPager = new ViewPager(context); llDots = new LinearLayout(context); llDots.setOrientation(RadioGroup.HORIZONTAL); llDots.setGravity(Gravity.CENTER_HORIZONTAL); LinearLayout.LayoutParams paramsGroup = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, (int) (20*fDensity)); paramsGroup.gravity = Gravity.CENTER_HORIZONTAL; llDots.setLayoutParams(paramsGroup); if(resIds == null) return; for(int i = 0;i<resIds.length;i++) { ImageView iv = new ImageView(context); iv.setId(i); iv.setTag(i); iv.setOnClickListener(mClick); iv.setOnTouchListener(onTouch); iv.setBackgroundResource(resIds[i]); arrViews.add(iv); RelativeLayout rl = new RelativeLayout(context); android.widget.RelativeLayout.LayoutParams layoutParam = new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT); layoutParam.addRule(RelativeLayout.CENTER_VERTICAL); ImageView dot = new ImageView(context); dot.setId(i); if (i==0) { dot.setImageResource(dotResId1); }else { dot.setImageResource(dotResId2); } rl.addView(dot, layoutParam); rl.setPadding(0, 0, (int) (13*fDensity), 0); llDots.addView(rl); } LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); baseView.addView(mViewPager, params); pageItemAdapter = new PageItemAdapter(arrViews); mViewPager.setAdapter(pageItemAdapter); mViewPager.setOnPageChangeListener(mPageChange); LayoutParams params2 = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, (int) (20 * fDensity)); params2.gravity = Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL; params2.bottomMargin = (int) (10*fDensity); baseView.addView(llDots,params2); initPage(); addContentView(); } private FrameLayout getBaseView() { return baseView; } private void addContentView() { ((Activity)context).addContentView(getBaseView(), new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); } public void show() { if(baseView != null ) { baseView.setVisibility(View.VISIBLE); } } public void dismiss() { if(baseView != null && baseView.getVisibility() == View.VISIBLE) { // baseView.setVisibility(View.INVISIBLE); alphaDismissView(baseView); } } private void alphaDismissView(final View view) { Animation animation = new AlphaAnimation(1, 0); animation.setDuration(500); view.startAnimation(animation); animation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation arg0) { } @Override public void onAnimationRepeat(Animation arg0) { } @Override public void onAnimationEnd(Animation arg0) { view.setVisibility(View.GONE); baseView.setVisibility(View.INVISIBLE); if(onSpalshDismissListener != null) { onSpalshDismissListener.onSplashDismissed(); } } }); } private void initPage() { if (resIds != null) { for (int i = 0; i < resIds.length; i++) { if (iCurrentPage == i) ((ImageView) llDots.findViewById(i)) .setImageResource(dotResId1); else ((ImageView) llDots.findViewById(i)) .setImageResource(dotResId2); } } } private OnPageChangeListener mPageChange = new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { iCurrentPage = arg0; initPage(); if(iCurrentPage == resIds.length-1) { dismiss(); } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }; OnClickListener mClick = new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case 0: break; default: break; } } }; OnTouchListener onTouch = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_UP) { int tag = (Integer) v.getTag(); if(tag == resIds.length - 1) { dismiss(); return true; } } return false; } }; public interface OnSpalshDismissListener { public void onSplashDismissed(); } }