Предоставить только растровое изображение для скольжения не URL - PullRequest
0 голосов
/ 05 июня 2018

У меня есть список видео URL.Я создаю эскизы из них.Эти эскизы представлены в виде bitmap.so, что я пробовал

Glide.with(mContext)
                    .load(bitmap)
                    .into(mVideoThumbnail)

Что я нашел из Здесь . Мы можем сделать что-то вроде этого.

Glide.with(mContext)
                    .load(url).asBitmap()
                    .into(mVideoThumbnail)

НоВышеуказанная функция используется для загрузки URL в виде растрового изображения.Он не принимает растровое изображение в качестве параметра.

Я также знаю, что могу напрямую установить растровое изображение в изображение, как указано ниже

mVideoThumbnail.setImageBitmap(bitmap);

Вышеописанный метод работает нормально, если мне нужно установить миниатюру для одноговидео, но в случае нескольких видео это вызывает некоторые проблемы с производительностью.

Я делюсь своим кодом для извлечения эскиза в виде растрового изображения и установки в мой ImageView.Есть ли способ передать напрямую растровое изображение в Glide или любые другие варианты, доступные для снижения производительности.Пожалуйста, помогите

public class TopicInstructionViewHolder implements View.OnClickListener {
@BindView(R.id.iv_thumbnail)
ImageView mVideoThumbnail;
@BindView(R.id.iv_play_video)
ImageView mVideoPlayIcon;
@BindView(R.id.tv_instruction_name)
TextView mInstructionName;
private ITopicVideoPlayListener mTopicVideoPlayListener;
private Context mContext;
private String videoPath;
private int instructionId;
private boolean mHasVideoSeenBL;

public TopicInstructionViewHolder(View itemView,
                                  ITopicVideoPlayListener mTopicVideoPlayListener,
                                  Context mContext) {
    ButterKnife.bind(this, itemView);
    this.mTopicVideoPlayListener = mTopicVideoPlayListener;
    this.mContext = mContext;
}

public void setData(TopicInstructionDetail topicInstructionDetail) {

    String thumbnailPath = null;
    TopicInstructionTranslationDetail topicInstructionTranslationDetails = findTopicInstructionAsPerLang(topicInstructionDetail.getmTopicInstructionTranslationDetails());
    mVideoPlayIcon.setOnClickListener(this);
    videoPath = topicInstructionTranslationDetails.getmInstructionPath();
    mHasVideoSeenBL = topicInstructionDetail.isCompleteSeen();
    instructionId = topicInstructionTranslationDetails.getmInstructionId();
    mInstructionName.setText(topicInstructionTranslationDetails.getmInstructionName());
    thumbnailPath = (NetworkConstants.VIDEO_URL + topicInstructionTranslationDetails.getmThumbnailPath());

    new SampleAsyncTask().execute(NetworkConstants.VIDEO_URL+videoPath);
    if (topicInstructionDetail.isCompleteSeen()) {
        mVideoPlayIcon.setImageResource(R.drawable.check);
    } else {
        mVideoPlayIcon.setImageResource(R.drawable.ic_play);
    }

}

private TopicInstructionTranslationDetail findTopicInstructionAsPerLang(List<TopicInstructionTranslationDetail> topicInstructionTranslationDetails) {

    TopicInstructionTranslationDetail topicInstructionTranslationDetail = null;
    for (TopicInstructionTranslationDetail topicTranslation : topicInstructionTranslationDetails) {
        if (topicTranslation.getmLanguage().equals(AppPreferencesHelper.getInstance(mContext).getCurrentUserLanguage())) {
            topicInstructionTranslationDetail = topicTranslation;
        }
    }

    if (topicInstructionTranslationDetail == null) {
        topicInstructionTranslationDetail = findDefaultTopicInstruction(topicInstructionTranslationDetails);
    }
    return topicInstructionTranslationDetail;
}

private TopicInstructionTranslationDetail findDefaultTopicInstruction(List<TopicInstructionTranslationDetail> topicInstructionTranslationDetails) {

    TopicInstructionTranslationDetail topicInstructionDetail = null;
    for (TopicInstructionTranslationDetail topicTranslation : topicInstructionTranslationDetails) {
        if (topicTranslation.getmLanguage().equals(LanguageCode.getLanguageCode(LanguageCode.LANGUAGE_FIRST))) {
            topicInstructionDetail = topicTranslation;
        }
    }
    return topicInstructionDetail;
}

@Override
public void onClick(View view) {
    mTopicVideoPlayListener.playVideo(videoPath, instructionId, mHasVideoSeenBL);
}

// извлечение растрового изображения из частного класса URL-адреса видео SampleAsyncTask extends AsyncTask {

    @Override
    protected Bitmap doInBackground(String... strings) {
        Bitmap bitmap = null;
        MediaMetadataRetriever mediaMetadataRetriever = null;
        try {
            mediaMetadataRetriever = new MediaMetadataRetriever();
            if (Build.VERSION.SDK_INT >= 14) {
                mediaMetadataRetriever.setDataSource(strings[0], new HashMap<String, String>());
            } else {
                mediaMetadataRetriever.setDataSource(strings[0]);
            }
            bitmap = mediaMetadataRetriever.getFrameAtTime(1, MediaMetadataRetriever.OPTION_CLOSEST);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (mediaMetadataRetriever != null) {
                mediaMetadataRetriever.release();
            }
        }
        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap s) {
        super.onPostExecute(s);
        try {
            mVideoThumbnail.setImageBitmap(s);
           /* Glide.with(mContext)
                    .load(s).asBitmap()
                    .into(mVideoThumbnail);*/
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
}

}

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вы используете Glide v3.Glide v4 добавил опцию для загрузки Bitmap как Drawable.Документы здесь

Обновление до версии 4 требует дополнительной настройки, отметьте здесь

0 голосов
/ 05 июня 2018

Используйте библиотеку Fresco вместо Glide.

Вы можете использовать библиотеку facebook fresco вместо скольжения для плавной и эффективной загрузки в список.В библиотеке Fresco есть конвейер методик загрузки миниатюр изображений в списке.Используйте Asynctask и конвейер фрески, чтобы получить миниатюру из видео и загрузить ее.

Проверьте этот ответ , реализованное решение для вашей проблемы.

...