StickerAdapter.java 5.1 KB
package com.cnlive.cnUploadDemo.sticker;


import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.cnlive.cnUploadDemo.R;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Lynn on 6/13/2017.
 */

public class StickerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final String DEFAULT_PATH = "assets://";
    public DisplayImageOptions mImageOptions = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .showImageOnLoading(null)
            .build();

    private Context mContext;
    private ImageClick mImageClick = new ImageClick();
    private List<String> mImagePathList = new ArrayList<>();
    private OnStickerItemClick mOnStickerItemClick;

    public StickerAdapter(Context context) {
        super();
        this.mContext = context;
        initImageLoader();
    }

    public void setOnStickerItemClick(OnStickerItemClick click) {
        mOnStickerItemClick = click;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view;
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sticker_item, parent, false);
        ImageHolder holder = new ImageHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ImageHolder imageHolder = (ImageHolder) holder;
        String path = mImagePathList.get(position);
        ImageLoader.getInstance().displayImage(DEFAULT_PATH + path, imageHolder.image, mImageOptions);
        imageHolder.image.setTag(path);
        imageHolder.image.setOnClickListener(mImageClick);
    }

    @Override
    public int getItemCount() {
        return mImagePathList.size();
    }

    @Override
    public int getItemViewType(int position) {
        return 1;
    }

    private void initImageLoader() {
        File cacheDir = StorageUtils.getCacheDirectory(mContext);
        int MAXMEMONRY = (int) Runtime.getRuntime().maxMemory();
        DisplayImageOptions defaultOption = new DisplayImageOptions.Builder()
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .build();
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(mContext)
                .memoryCacheExtraOptions(480, 800)
                .defaultDisplayImageOptions(defaultOption)
                .diskCacheExtraOptions(480, 800, null)
                .threadPoolSize(3)
                .threadPriority(Thread.NORM_PRIORITY - 2)
                .tasksProcessingOrder(QueueProcessingType.FIFO)
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new LruMemoryCache(MAXMEMONRY / 5))
                .diskCache(new UnlimitedDiskCache(cacheDir))
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
                .imageDownloader(new BaseImageDownloader(mContext))
                .imageDecoder(new BaseImageDecoder(false))
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
                .build();
        ImageLoader.getInstance().init(configuration);
    }

    public void addStickerImage(String folderPath) {
        mImagePathList.clear();
        try {
            String[] files = mContext.getAssets().list(folderPath);
            for (String name : files) {
                mImagePathList.add(folderPath + File.separator + name);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        this.notifyDataSetChanged();
    }

    public class ImageHolder extends RecyclerView.ViewHolder {
        public ImageView image;

        public ImageHolder(View itemView) {
            super(itemView);
            this.image = (ImageView) itemView.findViewById(R.id.sticker_img);
        }
    }

    /**
     * 选择贴图
     */
    private final class ImageClick implements View.OnClickListener {

        @Override
        public void onClick(View view) {
            String data = (String) view.getTag();
            if (mOnStickerItemClick != null)
                mOnStickerItemClick.selectedStickerItem(data);
        }
    }

    public interface OnStickerItemClick {
        void selectedStickerItem(String path);
    }
}