package com.mingle.sweetpick; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.widget.AdapterView; import com.mingle.adapter.MenuRVAdapter; import com.mingle.entity.MenuEntity; import com.mingle.sweetsheet.R; import com.mingle.widget.CRImageView; import com.mingle.widget.FreeGrowUpParentRelativeLayout; import com.mingle.widget.SweetView; import java.util.List; /** * @author zzz40500 * @version 1.0 * @date 2015/8/5. * @github: https://github.com/zzz40500 */ public class RecyclerViewDelegate extends Delegate { private SweetView mSweetView; private RecyclerView mRV; private MenuRVAdapter mMenuRVAdapter; private CRImageView sliderIm; private FreeGrowUpParentRelativeLayout mFreeGrowUpParentRelativeLayout; private boolean mIsDragEnable; private int mContentViewHeight; public RecyclerViewDelegate(boolean dragEnable) { mIsDragEnable=dragEnable; } public RecyclerViewDelegate(boolean dragEnable ,int contentViewHeight) { mContentViewHeight = contentViewHeight; mIsDragEnable = dragEnable; } @Override protected View createView() { View rootView = LayoutInflater.from(mParentVG.getContext()) .inflate(R.layout.layout_rv_sweet, null, false); mSweetView = (SweetView) rootView.findViewById(R.id.sv); mFreeGrowUpParentRelativeLayout = (FreeGrowUpParentRelativeLayout) rootView.findViewById(R.id.freeGrowUpParentF); mRV = (RecyclerView) rootView.findViewById(R.id.rv); sliderIm = (CRImageView) rootView.findViewById(R.id.sliderIM); mRV.setLayoutManager(new LinearLayoutManager(mParentVG.getContext(), LinearLayoutManager.VERTICAL, false)); mSweetView.setAnimationListener(new AnimationImp()); if(mContentViewHeight > 0){ mFreeGrowUpParentRelativeLayout.setContentHeight(mContentViewHeight); } return rootView; } public RecyclerViewDelegate setContentHeight(int height){ if(height >0 && mFreeGrowUpParentRelativeLayout != null){ mFreeGrowUpParentRelativeLayout.setContentHeight(height); }else{ mContentViewHeight=height; } return this; } protected void setMenuList(final List<MenuEntity> menuEntities) { mMenuRVAdapter = new MenuRVAdapter(menuEntities, SweetSheet.Type.RecyclerView); mRV.setAdapter(mMenuRVAdapter); mMenuRVAdapter.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (mOnMenuItemClickListener != null) { if (mOnMenuItemClickListener.onItemClick(position, menuEntities.get(position))) { delayedDismiss(); } } } }); mRV.setLayoutAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { mRV.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); mFreeGrowUpParentRelativeLayout.setClipChildren(false); } @Override public void onAnimationEnd(Animation animation) { mRV.setOnTouchListener(null); mFreeGrowUpParentRelativeLayout.setClipChildren(true); } @Override public void onAnimationRepeat(Animation animation) { } }); } public void notifyDataSetChanged() { mMenuRVAdapter.notifyDataSetChanged(); } protected void show() { super.show(); ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); if(mRootView.getParent()!= null){ mParentVG.removeView(mRootView); } mParentVG.addView(mRootView, lp); mSweetView.show(); } @Override protected void dismiss() { super.dismiss(); } class AnimationImp implements SweetView.AnimationListener { @Override public void onStart() { mFreeGrowUpParentRelativeLayout.reset(); mStatus = SweetSheet.Status.SHOWING; sliderIm.setVisibility(View.INVISIBLE); mRV.setVisibility(View.GONE); } @Override public void onEnd() { if( mStatus==SweetSheet.Status.SHOWING) { mStatus = SweetSheet.Status.SHOW; if(mIsDragEnable) { sliderIm.setVisibility(View.VISIBLE); sliderIm.circularReveal(sliderIm.getWidth() / 2, sliderIm.getHeight() / 2, 0, sliderIm.getWidth()); } } } @Override public void onContentShow() { mRV.setVisibility(View.VISIBLE); mRV.setAdapter(mMenuRVAdapter); mRV.scheduleLayoutAnimation(); } } }