/** * Copyright 2016 bingoogolapple * <p/> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cn.bingoogolapple.photopicker.pw; import android.app.Activity; import android.graphics.drawable.ColorDrawable; import android.support.v4.view.ViewCompat; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.LinearLayout; import java.util.ArrayList; import cn.bingoogolapple.androidcommon.adapter.BGAOnRVItemClickListener; import cn.bingoogolapple.androidcommon.adapter.BGARecyclerViewAdapter; import cn.bingoogolapple.androidcommon.adapter.BGAViewHolderHelper; import cn.bingoogolapple.photopicker.R; import cn.bingoogolapple.photopicker.imageloader.BGAImage; import cn.bingoogolapple.photopicker.model.BGAImageFolderModel; import cn.bingoogolapple.photopicker.util.BGAPhotoPickerUtil; /** * 作者:王浩 邮件:bingoogolapple@gmail.com * 创建时间:16/6/24 下午6:19 * 描述:选择图片目录的PopupWindow */ public class BGAPhotoFolderPw extends BGABasePopupWindow implements BGAOnRVItemClickListener { public static final int ANIM_DURATION = 300; private LinearLayout mRootLl; private RecyclerView mContentRv; private FolderAdapter mFolderAdapter; private Delegate mDelegate; private int mCurrentPosition; public BGAPhotoFolderPw(Activity activity, View anchorView, Delegate delegate) { super(activity, R.layout.bga_pp_pw_photo_folder, anchorView, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); mDelegate = delegate; } @Override protected void initView() { mRootLl = getViewById(R.id.ll_photo_folder_root); mContentRv = getViewById(R.id.rv_photo_folder_content); } @Override protected void setListener() { mRootLl.setOnClickListener(this); mFolderAdapter = new FolderAdapter(mContentRv); mFolderAdapter.setOnRVItemClickListener(this); } @Override protected void processLogic() { setAnimationStyle(android.R.style.Animation); setBackgroundDrawable(new ColorDrawable(0x90000000)); mContentRv.setLayoutManager(new LinearLayoutManager(mActivity)); mContentRv.setAdapter(mFolderAdapter); } /** * 设置目录数据集合 * * @param datas */ public void setData(ArrayList<BGAImageFolderModel> datas) { mFolderAdapter.setData(datas); } @Override public void show() { showAsDropDown(mAnchorView); ViewCompat.animate(mContentRv).translationY(-mWindowRootView.getHeight()).setDuration(0).start(); ViewCompat.animate(mContentRv).translationY(0).setDuration(ANIM_DURATION).start(); ViewCompat.animate(mRootLl).alpha(0).setDuration(0).start(); ViewCompat.animate(mRootLl).alpha(1).setDuration(ANIM_DURATION).start(); } @Override public void onClick(View view) { if (view.getId() == R.id.ll_photo_folder_root) { dismiss(); } } @Override public void dismiss() { ViewCompat.animate(mContentRv).translationY(-mWindowRootView.getHeight()).setDuration(ANIM_DURATION).start(); ViewCompat.animate(mRootLl).alpha(1).setDuration(0).start(); ViewCompat.animate(mRootLl).alpha(0).setDuration(ANIM_DURATION).start(); if (mDelegate != null) { mDelegate.executeDismissAnim(); } mContentRv.postDelayed(new Runnable() { @Override public void run() { BGAPhotoFolderPw.super.dismiss(); } }, ANIM_DURATION); } public int getCurrentPosition() { return mCurrentPosition; } @Override public void onRVItemClick(ViewGroup viewGroup, View view, int position) { if (mDelegate != null && mCurrentPosition != position) { mDelegate.onSelectedFolder(position); } mCurrentPosition = position; dismiss(); } private class FolderAdapter extends BGARecyclerViewAdapter<BGAImageFolderModel> { private int mImageSize; public FolderAdapter(RecyclerView recyclerView) { super(recyclerView, R.layout.bga_pp_item_photo_folder); mData = new ArrayList<>(); mImageSize = BGAPhotoPickerUtil.getScreenWidth() / 10; } @Override protected void fillData(BGAViewHolderHelper helper, int position, BGAImageFolderModel model) { helper.setText(R.id.tv_item_photo_folder_name, model.name); helper.setText(R.id.tv_item_photo_folder_count, String.valueOf(model.getCount())); BGAImage.display(helper.getImageView(R.id.iv_item_photo_folder_photo), R.mipmap.bga_pp_ic_holder_light, model.coverPath, mImageSize); } } public interface Delegate { void onSelectedFolder(int position); void executeDismissAnim(); } }