com.netease.hearttouch.htimagepicker.defaultui.imagepreview.activity.HTMultiImagesPreviewActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.netease.hearttouch.htimagepicker.defaultui.imagepreview.activity.HTMultiImagesPreviewActivity.java

Source

/*
 * Copyright by Netease (c) 2016.
 * This source code is licensed under the MIT-style license found in the LICENSE file
 *  in the root directory of this source tree.
 */

package com.netease.hearttouch.htimagepicker.defaultui.imagepreview.activity;

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.FrameLayout;

import com.netease.hearttouch.htimagepicker.R;
import com.netease.hearttouch.htimagepicker.core.imagepreview.activity.HTBaseImagePreviewActivity;
import com.netease.hearttouch.htimagepicker.core.imagescan.Image;
import com.netease.hearttouch.htimagepicker.defaultui.imagepreview.adapter.ImagePreviewPagerAdapter;
import com.netease.hearttouch.htimagepicker.core.util.ContextUtil;
import com.netease.hearttouch.htimagepicker.core.view.NavigationBar;
import com.netease.hearttouch.htimagepicker.core.view.photoview.PhotoViewPager;
import com.netease.hearttouch.htimagepicker.core.view.ViewWithNavationBar;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Created by zyl06 on 2/22/16.
 */
public class HTMultiImagesPreviewActivity extends HTBaseImagePreviewActivity {
    private FrameLayout mNavigationBarContainer;
    private FrameLayout mContentView;
    private NavigationBar mNavigationBar;

    private Button mFinishBtn;
    private CheckBox mPickBox;
    private PhotoViewPager mImagePager;

    private Integer mPagePosition = 0;
    private boolean mIsPickBoxChangedByHand = true;
    private Set<Integer> mCancelMarks = new HashSet<>();

    private List<Image> mSelectedImages = new ArrayList<Image>();

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (mImages != null && !mImages.isEmpty()) {
            mSelectedImages = new ArrayList<Image>(mImages.size());
            mSelectedImages.addAll(mImages);
        }

        ViewWithNavationBar view = new ViewWithNavationBar(this);
        setContentView(view);
        mNavigationBarContainer = view.getNavigationBarContainer();
        mNavigationBar = view.getNavigationBar();
        mContentView = view.getContentView();

        initNavigationBar();
        initContentView();
    }

    private void initNavigationBar() {
        mNavigationBarContainer.setBackgroundColor(ContextUtil.INSTANCE.getColor(R.color.ne_transparent));
        mNavigationBar.setLeftBackImage(R.drawable.ic_back_arrow_white);
        mNavigationBar.setBackgroundColor(ContextUtil.INSTANCE.getColor(R.color.ne_bg_transparent_grey));
        mNavigationBar.setBackButtonClick(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HTMultiImagesPreviewActivity.this.finish();
            }
        });

        View rightView = LayoutInflater.from(this).inflate(R.layout.htimagepicker_view_image_picker, null);
        mNavigationBar.setRightView(rightView);
        mPickBox = (CheckBox) rightView.findViewById(R.id.pick_mark);
        mPickBox.setChecked(true);
        mPickBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (mIsPickBoxChangedByHand) {
                    if (!isChecked)
                        mCancelMarks.add(mPagePosition);
                    else
                        mCancelMarks.remove(mPagePosition);
                    updateFinishButton();
                }
            }
        });
    }

    private void initContentView() {
        View view = LayoutInflater.from(this).inflate(R.layout.htimagepicker_activity_image_fullscreen, null,
                false);
        mContentView.addView(view);
        mContentView.setBackgroundResource(R.color.ne_black);

        mFinishBtn = (Button) view.findViewById(R.id.btn_finish);
        mFinishBtn.setVisibility(View.VISIBLE);
        mFinishBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HTMultiImagesPreviewActivity.this.finish();
            }
        });
        updateFinishButton();

        mImagePager = (PhotoViewPager) view.findViewById(R.id.image_fullscreen_pager);
        mImagePager.setBackgroundResource(R.color.ne_black);
        ImagePreviewPagerAdapter adapter = new ImagePreviewPagerAdapter(this, getImagePaths());
        mImagePager.setAdapter(adapter);
        mImagePager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {
                mPagePosition = position;
                updatePickMarkBox();
                updateTitle(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                switch (state) {
                case ViewPager.SCROLL_STATE_DRAGGING:
                    break;
                case ViewPager.SCROLL_STATE_SETTLING:
                    break;
                case ViewPager.SCROLL_STATE_IDLE:
                    break;
                default:
                    break;
                }
            }
        });
        updateTitle(0);
    }

    @Override
    public List<Image> getSelectedImages() {
        //
        if (mCancelMarks.size() == 0) {
            return null;
        }

        ArrayList<Image> selectedPhotos = new ArrayList<>();
        final int size = mImages.size();
        for (int i = 0; i < size; ++i) {
            if (!mCancelMarks.contains(i)) {
                selectedPhotos.add(mImages.get(i));
            }
        }
        return selectedPhotos;
    }

    private void updatePickMarkBox() {
        boolean isCanceled = mCancelMarks.contains(mPagePosition);
        mIsPickBoxChangedByHand = false;
        mPickBox.setChecked(!isCanceled);
        mIsPickBoxChangedByHand = true;
    }

    private void updateFinishButton() {
        int selectCount = mImages.size() - mCancelMarks.size();
        mFinishBtn
                .setText(ContextUtil.INSTANCE.stringFormat(R.string.ne_pick_image_finish_with_number, selectCount));
    }

    private void updateTitle(int position) {
        String title = String.format("%d / %d", position + 1, mImages.size());
        mNavigationBar.setTitleColor(Color.WHITE);
        mNavigationBar.setTitle(title);
    }

}