Изображение не отображается при использовании Html .ImageGetter. Но место отводится для изображения - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужно разобрать контент, который приходит с сайта WordPress (URL). Поскольку он содержит данные вместе с тегами, я использую AppCompatTextView для отображения текста и создал собственный класс java для обработки изображения (тега).

Я взял ссылку ниже.

https://medium.com/@rajeefmk / android -textview-and-image-loading-from-url-part-1-a7457846abb6 .

ПРИМЕЧАНИЕ. Я сделал несколько изменений в своем коде по сравнению с кодом, приведенным в приведенной выше ссылке.

Теперь проблема в том, что для изображения выделяется место на экране, а изображение - готов к загрузке. Но изображение не загружается.

Я использовал Toast для отображения при вызове onPrepareLoad ().

Ниже приведен мой пользовательский класс java для обработки изображения.

public class PicassoImageGetter implements Html.ImageGetter {

private AppCompatTextView textView = null;
private Context context;

public PicassoImageGetter(AppCompatTextView target, Context context) {
    this.textView = target;
    this.context = context;
}

@Override
public Drawable getDrawable(String source) {
    BitmapDrawablePlaceHolder drawable = new BitmapDrawablePlaceHolder();
    Picasso.get()
            .load(source)
            .placeholder(R.drawable.error_loading_image)
            .error(R.drawable.error_loading_image)
            .into(drawable);
    return drawable;
}

private class BitmapDrawablePlaceHolder extends BitmapDrawable implements Target {

    protected Drawable drawable;

    public void setDrawable(Drawable drawable) {
        this.drawable = drawable;
        int width = drawable.getIntrinsicWidth();
        int height = drawable.getIntrinsicHeight();
        drawable.setBounds(0, 0, width, height);
        setBounds(0, 0, width, height);
        if (textView != null) {
            textView.setText(textView.getText());
        }
    }

    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        setDrawable(new BitmapDrawable(context.getResources(), bitmap));
    }

    @Override
    public void onBitmapFailed(Exception e, Drawable errorDrawable) {
        Toast.makeText(context, "failed to load images", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {
        Toast.makeText(context, "Prepared" , Toast.LENGTH_SHORT).show();
        Log.d("prepared","prepared" + placeHolderDrawable);
    }
}
}

NOTE : я использовал get (), где App.get () используется в getDrawable ()

Ниже фрагмента кода для установки данных в AppCompatTextView:

PicassoImageGetter  imageGetter = new PicassoImageGetter(articleContent, getApplicationContext());
        Spannable html;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            html = (Spannable) Html.fromHtml(content, Html.FROM_HTML_MODE_LEGACY, imageGetter, null);
        }else
        {
            html = (Spannable) Html.fromHtml(content, imageGetter, null);
        }
        articleContent.setText(html); // setting content to text view

, где articleContent - мой контент AppCompatTextView и

- мои данные для анализа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...