کتابخانه Matisse

482

ماتیس یک ابزار برای انتخاب تصویر و ویدیو در اندروید است. شما می توانید :

  • در اکتیتویتی و یا فرگمنت از آن استفاده کنید
  • انتخاب تصاویر از جمله JPEG، PNG، GIF و فیلم ها از جمله MPEG، MP4
  • تم های مختلف را اعمال کنید، از جمله دو تم ساخته شده و تم سفارشی
  • بارگذاری تصاویر مختلف
  • قوانین فیلتر سفارشی را تعریف کنید
  • ...

گام اول : گرفتن Permission ها


این کتابخانه به دسترسی های زیر نیاز دارد :

  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE

گام دوم : افزودن Matisse


Glide و Matisse را به عنوان dependency در فایل build.gridle خود پیاده سازی کنید.

        
            dependencies {
               implementation 'com.zhihu.android:matisse:0.5.1'
               implementation 'com.github.bumptech.glide:glide:4.7.1'
            }
        
    

گام سوم : اضافه نمودن متن خطا


در فایل strings.xml خط زیر را اضافه نمایید .

        
               < string name="error_gif">x or y bound size should be at least %1$dpx and file size should be no more than %2$sM< /string>
        
    

گام چهارم : ساخت کلاس GifSizeFilter


در پروژه خود یک کلاس به اسم GifSizeFilter ایجاد کنید و کد های زیر را در آن جایگذاری کنید .

        
import android.content.Context;
import android.graphics.Point;

import com.zhihu.matisse.MimeType;
import com.zhihu.matisse.filter.Filter;
import com.zhihu.matisse.internal.entity.IncapableCause;
import com.zhihu.matisse.internal.entity.Item;
import com.zhihu.matisse.internal.utils.PhotoMetadataUtils;

import java.util.HashSet;
import java.util.Set;

public class GifSizeFilter extends Filter {

    private int mMinWidth;
    private int mMinHeight;
    private int mMaxSize;

    public GifSizeFilter(int minWidth, int minHeight, int maxSizeInBytes) {
        mMinWidth = minWidth;
        mMinHeight = minHeight;
        mMaxSize = maxSizeInBytes;
    }

    @Override
    public Set< MimeType> constraintTypes() {
        return new HashSet< MimeType>() {{
            add(MimeType.GIF);
        }};
    }

    @Override
    public IncapableCause filter(Context context, Item item) {
        if (!needFiltering(context, item))
            return null;

        Point size = PhotoMetadataUtils.getBitmapBound(context.getContentResolver(), item.getContentUri());
        if size.x < mMinWidth || size.y < mMinHeight || item.size > mMaxSize {
            return new IncapableCause(IncapableCause.DIALOG, context.getString(R.string.error_gif, mMinWidth,
                    String.valueOf(PhotoMetadataUtils.getSizeInMB(mMaxSize))));
        }
        return null;
    }

}

        
    

گام پنجم : ساخت کلاس Glide4Engine


در صورتی که از ورژن ۴ Glide استفاده می کنید در پروژه خود یک کلاس به اسم Glide4Engine ایجاد کنید و کد های زیر را در آن جایگذاری کنید .

        
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.request.RequestOptions;
import com.zhihu.matisse.engine.ImageEngine;

/**
 * {@link ImageEngine} implementation using Glide.
 */

public class Glide4Engine implements ImageEngine {

    @Override
    public void loadThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView, Uri uri) {
        Glide.with(context)
                .asBitmap() // some .jpeg files are actually gif
                .load(uri)
                .apply(new RequestOptions()
                        .override(resize, resize)
                        .placeholder(placeholder)
                        .centerCrop())
                .into(imageView);
    }

    @Override
    public void loadGifThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView,
                                 Uri uri) {
        Glide.with(context)
                .asBitmap() // some .jpeg files are actually gif
                .load(uri)
                .apply(new RequestOptions()
                        .override(resize, resize)
                        .placeholder(placeholder)
                        .centerCrop())
                .into(imageView);
    }

    @Override
    public void loadImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
        Glide.with(context)
                .load(uri)
                .apply(new RequestOptions()
                        .override(resizeX, resizeY)
                        .priority(Priority.HIGH)
                        .fitCenter())
                .into(imageView);
    }

    @Override
    public void loadGifImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
        Glide.with(context)
                .asGif()
                .load(uri)
                .apply(new RequestOptions()
                        .override(resizeX, resizeY)
                        .priority(Priority.HIGH)
                        .fitCenter())
                .into(imageView);
    }

    @Override
    public boolean supportAnimatedGif() {
        return true;
    }

}

        
    

گام ششم : چگونگی استفاده


در کد اکتیویتی و یا فرگمنت خود کد زیر را وارد نمایید .

        
Matisse.from(LaunchActivity.this) //Context
                .choose(MimeType.ofAll())
                .countable(true)
                .maxSelectable(1)
                .addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))
                .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
                .thumbnailScale(0.85f)
                .imageEngine(new Glide4Engine())
                .theme(R.style.Matisse_Dracula) // R.style.Matisse_Zhihu
                .setOnCheckedListener(new OnCheckedListener() {
                    @Override
                    public void onCheck(boolean isChecked) {
                        // DO SOMETHING IMMEDIATELY HERE
                        Log.i("Oxima", "onCheck: isChecked=" + isChecked);
                    }
                })
                .forResult(REQUEST_CODE_CHOOSE);
        
    

پس از انتخاب تصاویر توسط کاربر نتیجه را در متد onActitivityResult به صورت زیر دریافت کنید‌:

        
 @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK {
            List< String> pathes = Matisse.obtainPathResult(data);  // path of images that user selected
        }
    }
        
    
پیوست ها :
  • این مقاله دارای پیوست نمی باشد.
loder | اُکسیما
»» نویسنده مقاله
حسین رئیسی | اُکسیما

حسین رئیسی
»» پشتیبانی مقاله

تیم پشتیبانی اُکسیما به صورت 24 ساعت در هر زمان و مکان، پاسخگوی تمامی سوالات و ابهامات شما در مورد این مقاله خواهند بود. بدین منظور شما می توانید از طریق روش های زیر از پشتیبانی فنی این مقاله برخوردار گردید. تیم پشتیبانی این اطمینان خاطر را به شما دانشجویان گرامی خواهند داد که در سریع ترین زمان ممکن پاسخگوی شما عزیزان باشند.


به اشتراک بگذارید ...

دوستان و همراهان گرامی : آیا تمایل دارید این مقاله را با دوستان و آشنایان خود در تلگرام به اشتراک بگذارید؟

مقاله های پیشنهادی

سویفت یک زبان برنامه‌نویسی چند شیوه‌ای و از نوع کامپایلری است که برای توسعهٔ iOS، macOS، watchOS و tvOS توسط شرکت اپل ساخته‌شده‌است. سویفت برای کار با فریمورک‌های Cocoa و Cocoa Touch اپل و تعامل با حجم عظیمی از کدهای Objective-C نوشته شده برای محصولات اپل طراحی شده‌است. هیچ زمانی بهتر از الان برای برای کسب مهارت در زبان برنامه نویسی open source اپل یعنی زبان سویفت وجود نداشته است ! در این مقاله دلایلی را برای یادگیری این زبان برای شما آورده ایم که ما را نیز شگفت زده کرده است .

حسین رئیسی

543

بسیاری از مردم از من می پرسند که چه زبان برنامه نویسی را یاد بگیرند. این یک سوال بسیار سخت برای پاسخ است. چیزهای زیادی وجود دارد که قبل از تصمیم گیری باید در نظر گرفته شود. یکی از ساده ترین راه های انتخاب بهترین زبان برنامه نویسی برای یادگیری در سال 2018، توجه به بازار است. بازار به شما می گوید که زبان های برنامه نویسی مورد علاقه برای آینده چیست. ما باید از روند و تماشای اخبار و ظهور تکنولوژی جدید آگاهی داشته باشیم تا بتوانیم بادبان ها را در مورد زبان های برنامه نویسی یاد بگیریم، مخصوصا در سال 2018.

حسین رئیسی

584

اگر شما فقط یکی از این بهترین کتاب های برنامه نویسی را در سال جاری بخوانید، قدمی رو به جلو تقریبا نسبت به همه افراد اطراف خود برداشته اید . چرا که ، به گفته استیو مک کانل، نویسنده Code Compete ، یک کتاب بیشتر ازچیزی است که برنامه نویسان هر ساله می خوانند.

حسین رئیسی

740