Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
#1

Загрузка изображений в TextView из HTML - Программирование Android

13.08.2014, 22:12. Просмотров 1063. Ответов 2
Метки нет (Все метки)

Здравствуйте )
Достаточно частый вопрос. Но все усложняется тем, что это все находится в TextView.

Имеется код:
Java
1
2
3
4
5
        arrayList = new ArrayList<Object>();
        arrayAdapter = new NewsListAdapter(this, arrayList);
 
        listView = (ListView) findViewById(R.id.newsListView);
        listView.setAdapter(arrayAdapter);
Где NewsListAdapter мой адаптер, который в качестве View генерирует этот layout:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/news_item_padding" >
 
    <TextView
        android:id="@+id/newsItemTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textColor="@android:color/holo_orange_dark" />
 
    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:background="@android:color/holo_orange_dark" />
 
    <TextView
        android:id="@+id/newsItemDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/black" />
 
</LinearLayout>
Тут тоже все просто, TextView заголовка, View разделитель и TextView описание.

Проблемы начинаются, когда я в TextView R.id.newsItemDescription начинаю вставлять HTML:
Java
1
viewHolder.textViewDescription.setText(Html.fromHtml("тут_html_код_с_тегами_img", urlImageGetter /* это мой ImageGetter */, null));
Суть проблемы в том, что картинки просто издевательски маленькие (скриншот проблемы в аттаче).

Кто-то сталкивался с таким? И как решаются подобные проблемы?
Миниатюры
Загрузка изображений в TextView из HTML  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2014, 22:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Загрузка изображений в TextView из HTML (Программирование Android):

Как вставить несколько изображений в textView - Программирование Android
Здравствуйте, скажите как вставить несколько иконок в textView, то есть в нужные позиции в тексте. При вставке одной иконки все нормально,...

Html и TextView - Программирование Android
final ArrayList&lt;String&gt; arrLV = new ArrayList&lt;String&gt;(); final ArrayAdapter&lt;String&gt; aa; int resId =...

TextView и Html - Программирование Android
Здравствуйте уважаемые форумчане! Мне нужно сделать вывод текста в TextView с разметкой Html, но все мои усилия тщетны, использую данную...

Добавление ссылок и html текста в TextView и диалоги - Программирование Android
Привет всем! Какими методами Вы пользуетесь для добавления ссылок и html-текста в TextView и диалоги типа AlertDialog?

Текст из TextView перенести в другой TextView по нажатию Button - Программирование Android
Люди, помогите плиз. Недавно начал ковырять программирование под Android. Хотел сделать банальную вещь - текст из TextView перенести в...

Загрузка изображений - Программирование Android
Здравствуйте. Есть база изображений, например на web сервере, хостинге или соц сети. Задумка проста. Ни каких меню и кнопок, только...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
13.08.2014, 22:50  [ТС] #2
Цитата Сообщение от 646kapeh064 Посмотреть сообщение
Но все усложняется тем, что это все находится в TextView
Опечатка. Имелось ввиду ListView.
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
14.08.2014, 11:56  [ТС] #3
Выяснил кое-что.

ImageGetter:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
public class URLImageGetter implements Html.ImageGetter {
    public static HashMap<String, Drawable> listDrawableHashMap = new HashMap<String, Drawable>(); // TODO: Remove
 
    Context c;
    TextView container;
 
    /***
     * Construct the URLImageParser which will execute AsyncTask and refresh the container
     * @param t
     * @param c
     */
    public URLImageGetter(TextView t, Context c) {
        this.c = c;
        this.container = t;
    }
 
    public Drawable getDrawable(String source) {
        // root пути
        if (source.startsWith("//")) {
            source = "http:" + source;
        } else if (source.startsWith("/")) {
            source = "http:/" + source;
        }
 
        // TODO: Remove
        if (listDrawableHashMap.containsKey(source)) {
            return listDrawableHashMap.get(source);
        }
 
        URLBitmapDrawable urlBitmapDrawable = new URLBitmapDrawable();
 
        // get the actual source
        new ImageGetterAsyncTask(urlBitmapDrawable).execute(source);
 
        // return reference to URLDrawable where I will change with actual image from
        // the src tag
        return urlBitmapDrawable;
    }
 
    public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {
        URLBitmapDrawable urlBitmapDrawable;
 
        public ImageGetterAsyncTask(URLBitmapDrawable d) {
            this.urlBitmapDrawable = d;
        }
 
        @Override
        protected Drawable doInBackground(String... params) {
            String source = params[0];
            return fetchDrawable(source);
        }
 
        @Override
        protected void onPostExecute(Drawable result) {
            if (result == null) {
                return;
            }
 
            // set the correct bound according to the result from HTTP call
            urlBitmapDrawable.setBounds(0, 0, result.getIntrinsicWidth(), result.getIntrinsicHeight());
 
            // change the reference of the current drawable to the result
            // from the HTTP call
            urlBitmapDrawable.drawable = result;
 
            // redraw the image by invalidating the container
            //URLImageGetter.this.container.requestLayout();
            //URLImageGetter.this.container.invalidate();
            URLImageGetter.this.container.setText(URLImageGetter.this.container.getText());
        }
 
        /***
         * Get the Drawable from URL
         * @param urlString
         * @return
         */
        public Drawable fetchDrawable(String urlString) {
            try {
                InputStream is = fetch(urlString);
                Drawable drawable = Drawable.createFromStream(is, "src");
                drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
                URLImageGetter.listDrawableHashMap.put(urlString, drawable); // TODO: Remove
                return drawable;
            } catch (Exception e) {
                return null;
            }
        }
 
        private InputStream fetch(String urlString) throws MalformedURLException, IOException {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet request = new HttpGet(urlString);
            HttpResponse response = httpClient.execute(request);
            return response.getEntity().getContent();
        }
    }
}
BitmapDrawable:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class URLBitmapDrawable extends BitmapDrawable {
    // the drawable that you need to set, you could set the initial drawing
    // with the loading image if you need to
    public Drawable drawable;
 
    @Override
    public void draw(Canvas canvas) {
        // override the draw to facilitate refresh function later
        if(drawable != null) {
            drawable.draw(canvas);
        }
    }
}
На разных устройствах, разный размер изображения. Буд-то размер картинки конвертируется в dp.
Это не плохо, но не всегда красиво изменяется размер картинки.
В моем первом посту - неудачный вариант ресайза. А к этому посту прикрепляю более удачный вариант.
Миниатюры
Загрузка изображений в TextView из HTML   Загрузка изображений в TextView из HTML  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2014, 11:56
Привет! Вот еще темы с ответами:

Загрузка изображений в RecyclerView - Программирование Android
Здравствуйте, каким образом можно динамически загружать картинки в RecyclerView из интернета, чтобы все это дело не тормозило и было более...

Загрузка изображений на сервер - Программирование Android
Здравствуйте. Пытаюсь загрузить изображение на свой сервер в интернете. Нашел вот такой пример: import java.io.DataInputStream; import...

Загрузка изображений из сети в ListView - Программирование Android
Здравствуйте. Имеется файл в JSON формате. В нем дан массив объектов, каждый объект содержит поле &quot;name&quot; и поле &quot;image&quot;, в котором указан...

Загрузка изображений с RSS ленты - Программирование Android
Есть Reader RSS ленты, который преобразует это все в ListView. Как мне сделать так, чтобы вдобавок еще грузились картинки с этой же ленты?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru