package com.ly.supermvp.delegate; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.Gravity; import android.view.View; import android.widget.LinearLayout; import com.bm.library.PhotoView; import com.jakewharton.rxbinding.support.v4.widget.RxSwipeRefreshLayout; import com.ly.supermvp.R; import com.ly.supermvp.adapter.PictureGridAdapter; import com.ly.supermvp.utils.GlideUtil; import com.ly.supermvp.view.LoadingView; import com.orhanobut.dialogplus.DialogPlus; import com.orhanobut.dialogplus.Holder; import com.orhanobut.dialogplus.ViewHolder; /** * <Pre> * 美图大全视图代理类 * </Pre> * * @author 刘阳 * @version 1.0 * <p/> * Create by 2016/3/21 14:52 * @see https://github.com/liuyanggithub/SuperMvp */ public class PicturesFragmentDelegate extends BaseRecyclerViewDelegate implements LoadingView { private static final int PRELOAD_SIZE = 6; private LinearLayout ll_dialog_holder;//弹窗的布局 private DialogPlus mDialog; private StaggeredGridLayoutManager mGridViewLayoutManager;//recycleview视图样式管理器 @Override void initRecyclerView() { mGridViewLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); recyclerview.setLayoutManager(mGridViewLayoutManager); } @Override boolean setFloatingActionMenuVisible() { return true; } /** * 设置加载更多接口 * * @param callBack 加载更多的回调 */ public void registerLoadMoreCallBack(final SwipeRefreshAndLoadMoreCallBack callBack, final PictureGridAdapter adapter) { recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); boolean isBottom = mGridViewLayoutManager.findLastCompletelyVisibleItemPositions(new int[2])[1] >= adapter.getItemCount() - PRELOAD_SIZE; if (!swipe_refresh_layout.isRefreshing() && isBottom) { callBack.loadMore(); } } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } }); } public void showRefreshLayout() { if (!swipe_refresh_layout.isRefreshing()) { RxSwipeRefreshLayout.refreshing(swipe_refresh_layout).call(true); } } public void showDialog(String imgUrl) { ll_dialog_holder = (LinearLayout) getActivity().getLayoutInflater().inflate(R.layout.dialog_image_preview, null); Holder holder = new ViewHolder(ll_dialog_holder); PhotoView photo_view = (PhotoView) holder.getInflatedView().findViewById(R.id.photo_view); photo_view.enable();//启动缩放功能 GlideUtil.loadImage(getActivity(), imgUrl, photo_view); photo_view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mDialog.dismiss(); } }); showOnlyContentDialog(holder, Gravity.TOP, false); } /** * 设置悬浮菜单项目点击事件 */ public void setFloatingActionButtonListener(final FloatingActionButtonListener listener){ for(int i = 0; i < mFloatingActionButtons.size(); i++){ String id = ""; switch (i) { case 0 : id = "4001"; break; case 1 : id = "4002"; break; case 2 : id = "4003"; break; case 3 : id = "4004"; break; default: id = "4001"; break; } final String finalId = id; mFloatingActionButtons.get(i).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onClick(finalId); hideMenu(true); } }); } } public interface FloatingActionButtonListener{ void onClick(String id); } /** * 仅显示内容的dialog * * @param holder * @param gravity 显示位置(居中,底部,顶部) * @param expanded 是否支持展开(有列表时适用) */ private void showOnlyContentDialog(Holder holder, int gravity, boolean expanded) { mDialog = DialogPlus.newDialog(getActivity()) .setContentHolder(holder) .setGravity(gravity) .setExpanded(expanded) .setCancelable(true) .create(); mDialog.show(); } }