package us.pinguo.edit.sdk.view; import android.animation.Animator; import android.animation.ObjectAnimator; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.RoundRectShape; import android.os.Build; import android.os.Bundle; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.WindowManager; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import java.util.List; import javax.microedition.khronos.opengles.GL10; import us.pinguo.androidsdk.PGGLListener; import us.pinguo.androidsdk.PGGLSurfaceView; import us.pinguo.edit.sdk.R; import us.pinguo.edit.sdk.adapter.PGEditBaseHoriScrollItemAdapter; import us.pinguo.edit.sdk.adapter.PGEditEffectHoriScrollItemAdapter; import us.pinguo.edit.sdk.adapter.PGEditEffectTypeHoriScrollItemAdapter; import us.pinguo.edit.sdk.adapter.PGEditHSLHoriScrollItemAdapter; import us.pinguo.edit.sdk.base.PGEditConstants; import us.pinguo.edit.sdk.base.PGEditTools; import us.pinguo.edit.sdk.base.view.EffectTypeMaskView; import us.pinguo.edit.sdk.base.view.IMenuItemView; import us.pinguo.edit.sdk.base.view.IPGEditCompareGLSurfaceView; import us.pinguo.edit.sdk.base.view.IPGEditRandomSeekBarView; import us.pinguo.edit.sdk.base.view.IPGEditSeekBarView; import us.pinguo.edit.sdk.base.view.IPGEditThreeSeekBarView; import us.pinguo.edit.sdk.base.view.IPGEditTiltShiftSeekBarView; import us.pinguo.edit.sdk.base.view.IPGEditView; import us.pinguo.edit.sdk.base.view.IPGEditViewListener; import us.pinguo.edit.sdk.base.view.IPGEditViewMenuListener; import us.pinguo.edit.sdk.base.view.PGEditAutoHideTextView; import us.pinguo.edit.sdk.base.widget.AnimationAdapter; import us.pinguo.edit.sdk.base.widget.LinearHoriScrollView; public class PGEditView implements IPGEditView { private static final long ANIMATION_TIME = 250l; protected IPGEditCompareGLSurfaceView mCompareGLSurfaceView; protected LinearHoriScrollView mFirstHorizontalLayout; protected LinearHoriScrollView mSecondHorizontalLayout; protected View mSecondMenusLayout; protected LinearHoriScrollView mThirdHorizontalLayout; protected View mFirstTopView; protected ViewGroup mCenterLayout; protected View mSaveEffectView; protected View mBackMainView; protected View mQuitView; protected View mSavePhotoView; protected View mProgressDialogView; protected View mLastStepView; protected View mNextStepView; protected View mBannerView; protected TextView mSecondBottomName; protected View mCenterLayoutParent; protected View mStepLayout; protected View mEffectBackView; protected PGEditAutoHideTextView mNameAutoHideTextView; protected PGEditAutoHideTextView mValueAutoHideTextView; private IPGEditViewListener mListener; private IPGEditViewMenuListener mMenuListener; private Activity mActivity; public void initView(Activity activity) { activity.setContentView(R.layout.pg_sdk_edit_main); mCompareGLSurfaceView = (IPGEditCompareGLSurfaceView) activity.findViewById(R.id.compare_view); mCompareGLSurfaceView.getPGGLSurfaceView().setListener(mPGGLListener); mBannerView = activity.findViewById(R.id.pg_sdk_edit_banner); mBannerView.setOnClickListener(mOnClickListener); mFirstHorizontalLayout = (LinearHoriScrollView) activity.findViewById(R.id.first_menus); mSecondHorizontalLayout = (LinearHoriScrollView) activity.findViewById(R.id.second_menus); mSecondMenusLayout = activity.findViewById(R.id.second_menus_layout); mThirdHorizontalLayout = (LinearHoriScrollView) activity.findViewById(R.id.third_menus); mFirstTopView = activity.findViewById(R.id.first_top); mStepLayout = activity.findViewById(R.id.step_layout); mSaveEffectView = activity.findViewById(R.id.save_effect); mSaveEffectView.setOnClickListener(mOnClickListener); mBackMainView = activity.findViewById(R.id.back_main); mBackMainView.setOnClickListener(mOnClickListener); mQuitView = activity.findViewById(R.id.quit); mQuitView.setOnClickListener(mOnClickListener); mSavePhotoView = activity.findViewById(R.id.save_photo); mSavePhotoView.setOnClickListener(mOnClickListener); mCenterLayout = (ViewGroup) activity.findViewById(R.id.center_layout); mCenterLayoutParent = activity.findViewById(R.id.center_layout_parent); mProgressDialogView = activity.findViewById(R.id.progress_dialog); mLastStepView = activity.findViewById(R.id.last_step); mLastStepView.setOnClickListener(mOnClickListener); mLastStepView.setEnabled(false); mNextStepView = activity.findViewById(R.id.next_step); mNextStepView.setOnClickListener(mOnClickListener); mNextStepView.setEnabled(false); mNameAutoHideTextView = (PGEditAutoHideTextView) activity.findViewById(R.id.name_auto_hide_textview); mValueAutoHideTextView = (PGEditAutoHideTextView) activity.findViewById(R.id.value_auto_hide_textview); mSecondBottomName = (TextView) activity.findViewById(R.id.second_bottom_name); mEffectBackView = activity.findViewById(R.id.effect_back); mActivity = activity; } public void showProgress() { mProgressDialogView.setVisibility(View.VISIBLE); } public void hideProgress() { mProgressDialogView.setVisibility(View.GONE); } public boolean isInProgressing() { return mProgressDialogView.getVisibility() == View.VISIBLE; } public void setListener(IPGEditViewListener listener) { mListener = listener; } public void toastFailForSdCard(Context context, boolean hasSD) { if (hasSD) { Toast.makeText(context, R.string.pg_sdk_edit_no_free_space, Toast.LENGTH_LONG).show(); } else { Toast.makeText(context, R.string.pg_sdk_edit_no_storage, Toast.LENGTH_LONG).show(); } } public void toastFirstFail(Context context) { Toast toast = Toast.makeText(context, R.string.pg_sdk_edit_first_show_fail, Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } public void setImageViewPhoto(Bitmap bitmap) { mCompareGLSurfaceView.setImageViewPhoto(bitmap); } public void setImageViewLayoutParam(int photoShowWidth, int photoShowHeight) { mCompareGLSurfaceView.setImageViewLayoutParam(photoShowWidth, photoShowHeight); } public PGGLSurfaceView getPGGLSurfaceView() { return mCompareGLSurfaceView.getPGGLSurfaceView(); } public LinearHoriScrollView getFirstHorizontalLayout() { return mFirstHorizontalLayout; } public LinearHoriScrollView getSecondHorizontalLayout() { return mSecondHorizontalLayout; } public LinearHoriScrollView getThirdHorizontalLayout() { return mThirdHorizontalLayout; } public View getFirstTopView() { return mFirstTopView; } public ViewGroup getCenterLayout() { return mCenterLayout; } public View getCenterLayoutParent() { return mCenterLayoutParent; } public IPGEditCompareGLSurfaceView getCompareGLSurfaceView() { return mCompareGLSurfaceView; } public View getProgressDialogView() { return mProgressDialogView; } public PGEditAutoHideTextView getNameAutoHideTextView() { return mNameAutoHideTextView; } public PGEditAutoHideTextView getValueAutoHideTextView() { return mValueAutoHideTextView; } public View getSecondMenusLayout() { return mSecondMenusLayout; } public TextView getSecondBottomName() { return mSecondBottomName; } public View getStepLayout() { return mStepLayout; } public View getEffectBackView() { return mEffectBackView; } public View getBackMainView() { return mBackMainView; } public View getSaveEffectView() { return mSaveEffectView; } public void enableNextAndLast(boolean nextStep, boolean lastStep) { mLastStepView.setEnabled(lastStep); mNextStepView.setEnabled(nextStep); } public void toastMakePhotoFail(Context context) { Toast.makeText(context, R.string.pg_sdk_edit_make_photo_fail, Toast.LENGTH_LONG).show(); } public void showQuitDialog(Activity activity) { SaveTipsDialog dialog = new SaveTipsDialog(activity); dialog.show(); } public void moveTopAndCenterToUpWithAnimation() { if (Build.VERSION.SDK_INT >= 11) { float centerMoveHeight = mActivity.getResources().getDimension( R.dimen.pg_sdk_edit_center_move_top_height); mStepLayout.setVisibility(View.INVISIBLE); ObjectAnimator centerAnimator = ObjectAnimator.ofFloat(mCenterLayoutParent, "y", 0f, -centerMoveHeight); centerAnimator.setDuration(ANIMATION_TIME); centerAnimator.start(); float topHeight = mActivity.getResources().getDimension(R.dimen.pg_sdk_edit_top_height); ObjectAnimator topAnimator = ObjectAnimator.ofFloat(mFirstTopView, "y", 0f, -topHeight); topAnimator.setDuration(ANIMATION_TIME); topAnimator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { } @Override public void onAnimationEnd(Animator animator) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { if (null != mMenuListener) { mMenuListener.onShowSecondAnimationEnd(); } } }); } @Override public void onAnimationCancel(Animator animator) { } @Override public void onAnimationRepeat(Animator animator) { } }); topAnimator.start(); } else { mStepLayout.setVisibility(View.INVISIBLE); mFirstTopView.setVisibility(View.GONE); int centerMoveHeight = Math.round(mActivity.getResources().getDimension(R.dimen.pg_sdk_edit_center_move_top_height)); mCenterLayoutParent.setPadding(mCenterLayoutParent.getPaddingLeft(), mCenterLayoutParent.getPaddingTop() - centerMoveHeight, mCenterLayoutParent.getPaddingRight(), centerMoveHeight + mCenterLayoutParent.getPaddingBottom()); if (null != mMenuListener) { mMenuListener.onShowSecondAnimationEnd(); } } } public void showBottomSecondMenuWithAnimation() { mSecondMenusLayout.setVisibility(View.VISIBLE); if (Build.VERSION.SDK_INT >= 11) { float secondBottomHeight = mActivity.getResources().getDimension(R.dimen.pg_sdk_edit_second_bottom_height); TranslateAnimation translateAnimation = new TranslateAnimation(0f, 0f, secondBottomHeight, 0f); translateAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); translateAnimation.setDuration(ANIMATION_TIME); mSecondMenusLayout.startAnimation(translateAnimation); float bottomHeight = mActivity.getResources().getDimension(R.dimen.pg_sdk_edit_bottom_height); TranslateAnimation firstTranslateAnimation = new TranslateAnimation(0f, 0f, 0f, bottomHeight); firstTranslateAnimation.setDuration(ANIMATION_TIME); firstTranslateAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); AlphaAnimation firstAlphaAnimation = new AlphaAnimation(1f, 0f); firstAlphaAnimation.setDuration(ANIMATION_TIME); firstAlphaAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); AnimationSet animationSet = new AnimationSet(true); animationSet.addAnimation(firstTranslateAnimation); animationSet.addAnimation(firstAlphaAnimation); animationSet.setAnimationListener(new AnimationAdapter() { @Override public void onAnimationEnd(Animation animation) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { mFirstHorizontalLayout.setVisibility(View.INVISIBLE); } }); } }); mFirstHorizontalLayout.startAnimation(animationSet); } else { mFirstHorizontalLayout.setVisibility(View.INVISIBLE); } } public void setMenuListener(IPGEditViewMenuListener menuListener) { mMenuListener = menuListener; } public void backTopAndCenterWithAnimation() { mStepLayout.setVisibility(View.VISIBLE); if (Build.VERSION.SDK_INT >= 11) { float centerHeight = mActivity.getResources().getDimension(R.dimen.pg_sdk_edit_center_move_top_height); ObjectAnimator centerAnimator = ObjectAnimator.ofFloat(mCenterLayoutParent, "y", -centerHeight, 0f); centerAnimator.setDuration(ANIMATION_TIME); centerAnimator.start(); float topHeight = mActivity.getResources().getDimension(R.dimen.pg_sdk_edit_top_height); ObjectAnimator topAnimator = ObjectAnimator.ofFloat(mFirstTopView, "y", -topHeight, 0f); topAnimator.setDuration(ANIMATION_TIME); topAnimator.start(); } else { mFirstTopView.setVisibility(View.VISIBLE); float topHeight = mActivity.getResources().getDimension(R.dimen.pg_sdk_edit_top_height); float bottomHeight = mActivity.getResources().getDimension(R.dimen.pg_sdk_edit_bottom_height); mCenterLayoutParent.setPadding(mCenterLayoutParent.getPaddingLeft(), Math.round(topHeight), mCenterLayoutParent.getPaddingRight(), Math.round(bottomHeight)); } } public void hideBottomSecondMenuWithAnimation() { if (Build.VERSION.SDK_INT >= 11) { float secondBottomHeight = mActivity.getResources().getDimension(R.dimen.pg_sdk_edit_second_bottom_height); TranslateAnimation translateAnimation = new TranslateAnimation(0f, 0f, 0f, secondBottomHeight); translateAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); translateAnimation.setDuration(ANIMATION_TIME); translateAnimation.setAnimationListener(new AnimationAdapter() { @Override public void onAnimationEnd(Animation animation) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { if (null != mMenuListener) { mMenuListener.onHideBottomSecondMenuWithAnimationFinish(); } } }); } }); mSecondMenusLayout.startAnimation(translateAnimation); mFirstHorizontalLayout.setVisibility(View.VISIBLE); float bottomHeight = mActivity.getResources().getDimension(R.dimen.pg_sdk_edit_bottom_height); TranslateAnimation firstTranslateAnimation = new TranslateAnimation(0f, 0f, bottomHeight, 0f); firstTranslateAnimation.setDuration(ANIMATION_TIME); firstTranslateAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); AlphaAnimation firstAlphaAnimation = new AlphaAnimation(0f, 1f); firstAlphaAnimation.setDuration(ANIMATION_TIME); firstAlphaAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); AnimationSet animationSet = new AnimationSet(true); animationSet.addAnimation(firstTranslateAnimation); animationSet.addAnimation(firstAlphaAnimation); mFirstHorizontalLayout.startAnimation(animationSet); } else { if (null != mMenuListener) { mMenuListener.onHideBottomSecondMenuWithAnimationFinish(); } mFirstHorizontalLayout.setVisibility(View.VISIBLE); } } public View getEffectTypeItem(View view) { return view.getRootView().findViewById(R.id.effect_type_item_root); } public EffectTypeMaskView getEffectTypeMask(View view) { return (EffectTypeMaskView) view.findViewById(R.id.effect_type_mask); } public void quitMenu() { backTopAndCenterWithAnimation(); hideBottomSecondMenuWithAnimation(); mThirdHorizontalLayout.setVisibility(View.GONE); mEffectBackView.setVisibility(View.GONE); mBackMainView.setVisibility(View.VISIBLE); mSecondHorizontalLayout.setVisibility(View.VISIBLE); } public void showEffectBackWithAnimation() { mEffectBackView.setOnClickListener(mOnClickListener); mEffectBackView.setVisibility(View.VISIBLE); AlphaAnimation alphaAnimation = new AlphaAnimation(0f, 1f); alphaAnimation.setDuration(PGEditConstants.EFFECT_ANIMATION_TIME); mEffectBackView.startAnimation(alphaAnimation); } public void hideEffectBackWithAnimation() { AlphaAnimation alphaAnimation = new AlphaAnimation(1f, 0f); alphaAnimation.setDuration(PGEditConstants.EFFECT_ANIMATION_TIME); alphaAnimation.setAnimationListener(new AnimationAdapter() { @Override public void onAnimationEnd(Animation animation) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { mEffectBackView.setVisibility(View.GONE); } }); } }); mEffectBackView.startAnimation(alphaAnimation); mEffectBackView.setOnClickListener(null); } public void backSecondMenuWithAnimation() { int scrollOffset = mThirdHorizontalLayout.getLastScrollX() - mThirdHorizontalLayout.getScrollX(); mThirdHorizontalLayout.startCollapseAnim(mThirdHorizontalLayout.getLastExpandPosition() - scrollOffset); mSecondHorizontalLayout.show(true); } public void resetSecondBottomLayoutWithAnimation() { mBackMainView.setVisibility(View.VISIBLE); AlphaAnimation backAlphaAnimation = new AlphaAnimation(0f, 1f); backAlphaAnimation.setDuration(PGEditConstants.EFFECT_ANIMATION_TIME); mBackMainView.startAnimation(backAlphaAnimation); AlphaAnimation nameAlphaAnimation = new AlphaAnimation(1f, 0f); nameAlphaAnimation.setDuration(PGEditConstants.EFFECT_BOTTOM_ANIMATION_TIME); nameAlphaAnimation.setAnimationListener(new AnimationAdapter() { @Override public void onAnimationEnd(Animation animation) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { if (null != mMenuListener) { mMenuListener.onResetSecondBottomLayoutWithAnimationFinish(); } AlphaAnimation alphaAnimation = new AlphaAnimation(0f, 1f); alphaAnimation.setDuration(PGEditConstants.EFFECT_BOTTOM_ANIMATION_TIME); mSecondBottomName.startAnimation(alphaAnimation); } }); } }); mSecondBottomName.startAnimation(nameAlphaAnimation); AlphaAnimation savePhotoAlphaAnimation = new AlphaAnimation(1f, 0f); savePhotoAlphaAnimation.setDuration(PGEditConstants.EFFECT_BOTTOM_ANIMATION_TIME); savePhotoAlphaAnimation.setAnimationListener(new AnimationAdapter() { @Override public void onAnimationEnd(Animation animation) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { AlphaAnimation alphaAnimation = new AlphaAnimation(0f, 1f); alphaAnimation.setDuration(PGEditConstants.EFFECT_BOTTOM_ANIMATION_TIME); mSaveEffectView.startAnimation(alphaAnimation); } }); } }); mSaveEffectView.startAnimation(savePhotoAlphaAnimation); } public void changeSecondBottomLayoutWithAnimation() { AlphaAnimation backAlphaAnimation = new AlphaAnimation(1f, 0f); backAlphaAnimation.setDuration(PGEditConstants.EFFECT_BOTTOM_ANIMATION_TIME); backAlphaAnimation.setAnimationListener(new AnimationAdapter() { @Override public void onAnimationEnd(Animation animation) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { mBackMainView.setVisibility(View.GONE); } }); } }); mBackMainView.startAnimation(backAlphaAnimation); AlphaAnimation nameAlphaAnimation = new AlphaAnimation(1f, 0f); nameAlphaAnimation.setDuration(PGEditConstants.EFFECT_BOTTOM_ANIMATION_TIME); nameAlphaAnimation.setAnimationListener(new AnimationAdapter() { @Override public void onAnimationEnd(Animation animation) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { if (null != mMenuListener) { mMenuListener.onChangeSecondBottomLayoutWithAnimationFinish(); } AlphaAnimation alphaAnimation = new AlphaAnimation(0f, 1f); alphaAnimation.setDuration(PGEditConstants.EFFECT_BOTTOM_ANIMATION_TIME); mSecondBottomName.startAnimation(alphaAnimation); } }); } }); mSecondBottomName.startAnimation(nameAlphaAnimation); AlphaAnimation savePhotoAlphaAnimation = new AlphaAnimation(1f, 0f); savePhotoAlphaAnimation.setDuration(PGEditConstants.EFFECT_BOTTOM_ANIMATION_TIME); savePhotoAlphaAnimation.setAnimationListener(new AnimationAdapter() { @Override public void onAnimationEnd(Animation animation) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { AlphaAnimation alphaAnimation = new AlphaAnimation(0f, 1f); alphaAnimation.setDuration(PGEditConstants.EFFECT_BOTTOM_ANIMATION_TIME); mSaveEffectView.startAnimation(alphaAnimation); } }); } }); mSaveEffectView.startAnimation(savePhotoAlphaAnimation); } @Override public void addSecondChildViews(List childList, float showCount, View.OnClickListener onClickListener) { PGEditBaseHoriScrollItemAdapter baseHoriScrollItemAdapter = new PGEditBaseHoriScrollItemAdapter(); baseHoriScrollItemAdapter.setContext(mActivity); baseHoriScrollItemAdapter.setData(childList); mSecondHorizontalLayout.setItemCountOnScreen(showCount); baseHoriScrollItemAdapter.setOnItemViewClickListener(onClickListener); mSecondHorizontalLayout.setAdapter(baseHoriScrollItemAdapter); } @Override public void addSecondEffectChildViews(List list, float showCount, View.OnClickListener onThirdClickListener, View.OnClickListener onScrollClickListener, String maskIcon, View lastSelectedView) { PGEditEffectHoriScrollItemAdapter baseHoriScrollItemAdapter = new PGEditEffectHoriScrollItemAdapter(mSecondHorizontalLayout, -1); baseHoriScrollItemAdapter.setOnItemViewClickListener(onThirdClickListener); baseHoriScrollItemAdapter.setOnScrollClickListener(onScrollClickListener); baseHoriScrollItemAdapter.hideFirstPosition(); baseHoriScrollItemAdapter.setMaskResource(maskIcon); baseHoriScrollItemAdapter.setData(list); baseHoriScrollItemAdapter.setContext(mActivity); baseHoriScrollItemAdapter.setLastSelectedView(lastSelectedView); mSecondHorizontalLayout.setItemCountOnScreen(showCount); mSecondHorizontalLayout.setAdapter(baseHoriScrollItemAdapter); } @Override public void addSecondEffectTypeChildViews(List childList, float showCount, View.OnClickListener onClickListener) { PGEditEffectTypeHoriScrollItemAdapter baseHoriScrollItemAdapter = new PGEditEffectTypeHoriScrollItemAdapter(); baseHoriScrollItemAdapter.setContext(mActivity); mSecondHorizontalLayout.setItemCountOnScreen(0f); baseHoriScrollItemAdapter.setData(childList); baseHoriScrollItemAdapter.setOnItemViewClickListener(onClickListener); mSecondHorizontalLayout.setAdapter(baseHoriScrollItemAdapter); } @Override public void showFirstImageViewPhoto(List mPGEditMenusBeanList, float showCount, View.OnClickListener onClickListener) { mActivity.findViewById(R.id.step_layout).setVisibility(View.VISIBLE); mActivity.findViewById(R.id.first_top).setVisibility(View.VISIBLE); PGEditBaseHoriScrollItemAdapter baseHoriScrollItemAdapter = new PGEditBaseHoriScrollItemAdapter(); baseHoriScrollItemAdapter.setContext(mActivity); baseHoriScrollItemAdapter.setData(mPGEditMenusBeanList); mFirstHorizontalLayout.setItemCountOnScreen(showCount); baseHoriScrollItemAdapter.setOnItemViewClickListener(onClickListener); mFirstHorizontalLayout.setAdapter(baseHoriScrollItemAdapter); } @Override public IPGEditSeekBarView createEditSeekBarView() { return new PGEditSeekBarView(); } @Override public void addThirdEffectChildViews(List list, float showCount, View.OnClickListener onThirdClickListener, View.OnClickListener onScrollClickListener, String maskIcon, View view, View lastSelectedView) { PGEditEffectHoriScrollItemAdapter baseHoriScrollItemAdapter = new PGEditEffectHoriScrollItemAdapter(mThirdHorizontalLayout, -1); baseHoriScrollItemAdapter.setOnItemViewClickListener(onThirdClickListener); baseHoriScrollItemAdapter.setOnScrollClickListener(onScrollClickListener); baseHoriScrollItemAdapter.setMaskResource(maskIcon); baseHoriScrollItemAdapter.setData(list); baseHoriScrollItemAdapter.setContext(mActivity); baseHoriScrollItemAdapter.setLastSelectedView(lastSelectedView); mThirdHorizontalLayout.setItemCountOnScreen(showCount); mThirdHorizontalLayout.setAdapter(baseHoriScrollItemAdapter); mThirdHorizontalLayout.setVisibility(View.VISIBLE); mSecondHorizontalLayout.hide(true); final int position = mSecondHorizontalLayout.getLinearContainer().indexOfChild(view); final int itemWidth = getEffectTypeItem(view).getWidth(); mThirdHorizontalLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int scroll = mSecondHorizontalLayout.getScrollX() - mThirdHorizontalLayout.getScrollX(); mThirdHorizontalLayout.startExpandAnim(position * itemWidth - scroll); mThirdHorizontalLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this); } }); } @Override public void addSecondFrameChildViews(List effectList, float v, View.OnClickListener mThirdClickListener, String pg_sdk_edit_effect_check, int color) { PGEditEffectHoriScrollItemAdapter baseHoriScrollItemAdapter = new PGEditEffectHoriScrollItemAdapter(mSecondHorizontalLayout, -1); baseHoriScrollItemAdapter.setContext(mActivity); baseHoriScrollItemAdapter.setMaskResource(pg_sdk_edit_effect_check); baseHoriScrollItemAdapter.hideFirstPosition(); mSecondHorizontalLayout.setItemCountOnScreen(v); baseHoriScrollItemAdapter.setData(effectList); baseHoriScrollItemAdapter.setOnItemViewClickListener(mThirdClickListener); mSecondHorizontalLayout.setAdapter(baseHoriScrollItemAdapter); } @Override public IMenuItemView createEditEffectMenuItemView() { return new PGEditMenuItemWithValueView(mActivity); } @Override public IPGEditThreeSeekBarView createEditThreeSeekBarView() { return new PGEditThreeSeekBarView(); } @Override public IPGEditThreeSeekBarView createEditHSLSeekBarView() { return new PGEditHSLSeekBarView(); } @Override public IPGEditThreeSeekBarView createEditTintSeekBarView() { return new PGEditTintSeekBarView(); } @Override public void addSecondHSLChildViews(List childList, float showCount, View.OnClickListener onClickListener) { PGEditBaseHoriScrollItemAdapter baseHoriScrollItemAdapter = new PGEditHSLHoriScrollItemAdapter(); baseHoriScrollItemAdapter.setContext(mActivity); baseHoriScrollItemAdapter.setData(childList); mSecondHorizontalLayout.setItemCountOnScreen(showCount); baseHoriScrollItemAdapter.setOnItemViewClickListener(onClickListener); mSecondHorizontalLayout.setAdapter(baseHoriScrollItemAdapter); } @Override public IPGEditRandomSeekBarView createEditRandomSeekBarView() { return new PGEditRandomSeekBarView(); } @Override public void addSecondLightingChildViews(List effectList, float v, View.OnClickListener onClickListener, View.OnClickListener mOnScrollClickListener, String pg_sdk_edit_effect_scroll) { PGEditEffectHoriScrollItemAdapter baseHoriScrollItemAdapter = new PGEditEffectHoriScrollItemAdapter(mSecondHorizontalLayout, -1); baseHoriScrollItemAdapter.setOnItemViewClickListener(onClickListener); baseHoriScrollItemAdapter.setOnScrollClickListener(mOnScrollClickListener); baseHoriScrollItemAdapter.setContext(mActivity); baseHoriScrollItemAdapter.setMaskResource(pg_sdk_edit_effect_scroll); baseHoriScrollItemAdapter.hideFirstPosition(); mSecondHorizontalLayout.setItemCountOnScreen(v); baseHoriScrollItemAdapter.setData(effectList); mSecondHorizontalLayout.setAdapter(baseHoriScrollItemAdapter); } @Override public IPGEditTiltShiftSeekBarView createEditTiltShiftSeekBarView() { return new PGEditTiltShiftSeekBarView(); } protected PGGLListener mPGGLListener = new PGGLListener() { @Override public void glCreated(GL10 gl) { if (null != mListener) { mListener.onGLCreated(gl); } } @Override public void glDestroyed() { } }; private View.OnClickListener mOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { if (null == mListener) { return; } if (v == mSaveEffectView) { mListener.onSaveEffectClick(); return; } if (v == mBackMainView) { mListener.onBackClick(); return; } if (v == mQuitView) { mListener.onQuitClick(); return; } if (v == mSavePhotoView) { mListener.onSavePhotoClick(); return; } if (v == mLastStepView) { mListener.onLastStepClick(); return; } if (v == mNextStepView) { mListener.onNextStepClick(); return; } if (v == mBannerView) { mListener.onBannerClick(); return; } if (v == mEffectBackView) { if (null != mMenuListener) { mMenuListener.onEffectBackClick(); } } } }; private class SaveTipsDialog extends Dialog { public SaveTipsDialog(Context context) { super(mActivity, PGEditTools.getStyleByName(mActivity, "SDKThemeDialog")); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RelativeLayout root = new RelativeLayout(mActivity); RelativeLayout.LayoutParams rootParams = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); root.setPadding(30, 0, 30, 0); root.setLayoutParams(rootParams); LinearLayout container = new LinearLayout(mActivity); container.setOrientation(LinearLayout.VERTICAL); LinearLayout.LayoutParams containerParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); containerParams.setMargins(30, 0, 30, 0); container.setLayoutParams(containerParams); container.setPadding(30, 20, 30, 20); TextView descView = new TextView(mActivity); LinearLayout.LayoutParams descViewParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); descViewParams.setMargins(0, 20, 0, 20); descView.setLayoutParams(descViewParams); descView.setGravity(Gravity.CENTER); descView.setTextColor(Color.parseColor("#ffffff")); descView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); descView.setText(mActivity.getString(R.string.pg_sdk_edit_quit_edit)); container.addView(descView); ImageView vDivider = new ImageView(mActivity); LinearLayout.LayoutParams vDividerParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, 1); vDividerParams.setMargins(0, 20, 0, 0); vDivider.setLayoutParams(vDividerParams); container.addView(vDivider); RelativeLayout buttonContainer = new RelativeLayout(mActivity); RelativeLayout.LayoutParams buttonContainerParams = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); buttonContainerParams.setMargins(0, 20, 0, 0); buttonContainer.setLayoutParams(buttonContainerParams); float density = mActivity.getResources().getDisplayMetrics().density; int width = mActivity.getResources().getDisplayMetrics().widthPixels; ImageView hDivider = new ImageView(mActivity); RelativeLayout.LayoutParams hDividerParams = new RelativeLayout.LayoutParams(1, Math.round(48 * density)); hDividerParams.addRule(RelativeLayout.CENTER_HORIZONTAL); hDivider.setLayoutParams(hDividerParams); buttonContainer.addView(hDivider); float[] outerR = new float[]{10, 10, 10, 10, 10, 10, 10, 10}; RoundRectShape roundRectShape = new RoundRectShape(outerR, null, null); ShapeDrawable drawable = new ShapeDrawable(roundRectShape); drawable.getPaint().setColor(Color.parseColor("#404040")); drawable.getPaint().setStyle(Paint.Style.FILL); Button confirmButton = new Button(mActivity); RelativeLayout.LayoutParams confirmButtonParams = new RelativeLayout.LayoutParams( (width - Math.round(80 * density)) / 2, ViewGroup.LayoutParams.WRAP_CONTENT); confirmButtonParams.addRule(RelativeLayout.LEFT_OF, hDivider.getId()); confirmButtonParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); confirmButton.setLayoutParams(confirmButtonParams); confirmButton.setGravity(Gravity.CENTER); confirmButton.setTextColor(Color.parseColor("#FFFFFF")); confirmButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20); confirmButton.setText(mActivity.getString(R.string.pg_sdk_edit_ok)); confirmButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (null != mListener) { mListener.onQuitDialogConfirm(); } } }); confirmButton.setBackgroundDrawable(drawable); buttonContainer.addView(confirmButton); Button closeButton = new Button(mActivity); RelativeLayout.LayoutParams closeButtonParams = new RelativeLayout.LayoutParams( (width - Math.round(80 * density)) / 2, ViewGroup.LayoutParams.WRAP_CONTENT); closeButtonParams.addRule(RelativeLayout.RIGHT_OF, hDivider.getId()); closeButtonParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); closeButton.setLayoutParams(closeButtonParams); closeButton.setGravity(Gravity.CENTER); closeButton.setTextColor(Color.parseColor("#9f9f9f")); closeButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20); closeButton.setText(mActivity.getString(R.string.pg_sdk_edit_quit)); closeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); closeButton.setBackgroundDrawable(drawable); buttonContainer.addView(closeButton); container.addView(buttonContainer); root.addView(container); outerR = new float[]{20, 20, 20, 20, 20, 20, 20, 20}; roundRectShape = new RoundRectShape(outerR, null, null); drawable = new ShapeDrawable(roundRectShape); drawable.getPaint().setColor(Color.parseColor("#343434")); drawable.getPaint().setStyle(Paint.Style.FILL); container.setBackgroundDrawable(drawable); setContentView(root); getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); setCanceledOnTouchOutside(false); } } }