package com.github.skykai.ui; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.bilibili.boxing.AbsBoxingViewFragment; import com.bilibili.boxing.BoxingMediaLoader; import com.bilibili.boxing.model.entity.BaseMedia; import com.bilibili.boxing_impl.adapter.BoxingMediaAdapter; import com.bilibili.boxing_impl.view.SpacesItemDecoration; import com.github.skykai.R; import com.github.skykai.view.CoordinatorLinearLayout; import com.github.skykai.view.CoordinatorRecyclerView; import java.util.List; import uk.co.senab.photoview.PhotoView; /** * Created by sky on 17/2/28. */ public class PhotoPickerFragment extends AbsBoxingViewFragment { public static final String TAG = "com.github.skykai.ui.PhotoPickerFragment"; private static final int GRID_COUNT = 3; private static final int TOP_REMAIN_HEIGHT = 48; private Toolbar toolbar; private PhotoView photoView; private TextView albumTextView; private CoordinatorLinearLayout parentLayout; private CoordinatorRecyclerView photoRecyclerView; private BoxingMediaAdapter mediaAdapter; public static PhotoPickerFragment newInstance() { return new PhotoPickerFragment(); } @Override public void onCreateWithSelectedMedias(Bundle bundle, @Nullable List<BaseMedia> selectedMedias) { mediaAdapter = new BoxingMediaAdapter(getContext()); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_photo_picker, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { initView(view); super.onViewCreated(view, savedInstanceState); } private void initView(View view) { toolbar = (Toolbar) view.findViewById(R.id.tool_bar); parentLayout = (CoordinatorLinearLayout) view.findViewById(R.id.parent_layout); photoRecyclerView = (CoordinatorRecyclerView) view.findViewById(R.id.photo_recycler_view); albumTextView = (TextView) view.findViewById(R.id.album_text_view); photoView = (PhotoView) view.findViewById(R.id.photo_view); setLayoutSize(); initToolBar(); initRecyclerView(); } private void setLayoutSize() { int topViewHeight = ViewUtils.dip2px(TOP_REMAIN_HEIGHT) + ViewUtils.getScreenWidth(); int topBarHeight = ViewUtils.dip2px(TOP_REMAIN_HEIGHT); parentLayout.setTopViewParam(topViewHeight, topBarHeight); photoView.getLayoutParams().height = ViewUtils.getScreenWidth(); photoRecyclerView.getLayoutParams().height = ViewUtils.getScreenHeight() - topBarHeight; parentLayout.getLayoutParams().height = topViewHeight + ViewUtils.getScreenHeight() - topBarHeight; photoRecyclerView.setCoordinatorListener(parentLayout); } private void initToolBar() { if (getActivity() instanceof AppCompatActivity) { final AppCompatActivity activity = (AppCompatActivity) getActivity(); activity.setSupportActionBar(toolbar); activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); activity.getSupportActionBar().setDisplayShowTitleEnabled(false); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { activity.onBackPressed(); } }); } } private void initRecyclerView() { GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), GRID_COUNT); gridLayoutManager.setSmoothScrollbarEnabled(true); photoRecyclerView.setLayoutManager(gridLayoutManager); photoRecyclerView.addItemDecoration(new SpacesItemDecoration(getResources().getDimensionPixelOffset(com.bilibili.boxing_impl.R.dimen.media_margin), GRID_COUNT)); mediaAdapter.setOnMediaClickListener(new OnMediaClickListener()); photoRecyclerView.setAdapter(mediaAdapter); } @Override public void showMedia(@Nullable List<BaseMedia> medias, int allCount) { if (medias == null || medias.size() == 0) return; mediaAdapter.addAllData(medias); displayPhoto(medias.get(0)); } private class OnMediaClickListener implements View.OnClickListener { @Override public void onClick(View v) { displayPhoto((BaseMedia) v.getTag()); } } private void displayPhoto(BaseMedia media) { String path = media.getPath(); BoxingMediaLoader.getInstance().displayRaw(photoView, path, null); } @Override public void startLoading() { loadMedias(); loadAlbum(); } }