Виджет: TextView и ImageGetter

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
vornic
Сообщения: 10
Зарегистрирован: 13 мар 2014, 12:34
Откуда: Moldova
Контактная информация:

Виджет: TextView и ImageGetter

Сообщение vornic » 13 мар 2014, 12:46

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

В своём классе я формирую длинную строку с тэгами и вывожу так:

Код: Выделить всё

		ImageGetter getter = new ImageGetter() {
			public Drawable getDrawable(String source) {
			URL url = null;
			Drawable bmp = null;
			  try {
				url = new URL(source);
				URLConnection connection = url.openConnection();
				InputStream stream = connection.getInputStream();
				bmp = Drawable.createFromStream(stream, "src");
			  } catch (MalformedURLException e) {
					e.printStackTrace();
			  } catch (Throwable t) {
					t.printStackTrace();
			  }	
			  if (bmp != null) {
				bmp.setBounds(0, 0, bmp.getIntrinsicWidth(), bmp.getIntrinsicHeight());
			  }
 
			return bmp;
			}
		};

		Spanned Span = Html.fromHtml(pageContent, getter, null);
		updateViews.setTextViewText(R.id.definition, Span);
в строке встречаются тэги вставки картинки, вот такие: <img src='icon' />
в ресурсах (/res/drawable/) у меня есть картинка icon.png
...но на выходе, на виджете есть всё что нужно кроме картинок, вместо них стоит прямоугольник [obj]. Уже замучался искать способ показать картинку, может знающие люди подскажут :(

PS Это всё проверяю на телефоне с андроидом 2.3.6
С Уважением, Владимир Ворническу.


Аватара пользователя
vornic
Сообщения: 10
Зарегистрирован: 13 мар 2014, 12:34
Откуда: Moldova
Контактная информация:

Re: Виджет: TextView и ImageGetter

Сообщение vornic » 13 мар 2014, 12:58

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

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Виджет: TextView и ImageGetter

Сообщение altwin » 13 мар 2014, 13:03

Из ссылки в прошлом сообщении:
[syntax=java5]
URL url = new URL("http://image10.bizrate-images.com/resiz ... 2216744464");
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bmp);[/syntax]
WebView, это не ImageView. В чем еще разбираться?
Изображение

Аватара пользователя
vornic
Сообщения: 10
Зарегистрирован: 13 мар 2014, 12:34
Откуда: Moldova
Контактная информация:

Re: Виджет: TextView и ImageGetter

Сообщение vornic » 13 мар 2014, 13:08

Прошу прощения, видимо по не опытности, но я вообще не понял о чем вы сейчас.
Вы хотите сказать что WebView, это практически тот же TextView, и он не умеет отображать картинки?
С Уважением, Владимир Ворническу.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Виджет: TextView и ImageGetter

Сообщение altwin » 13 мар 2014, 13:21

vornic писал(а):Прошу прощения, видимо по не опытности, но я вообще не понял о чем вы сейчас.
Вы хотите сказать что WebView, это практически тот же TextView, и он не умеет отображать картинки?
&nbspДа WebView, это не ImageView. Для того, чтобы показать картинку, браузер должен выполнить get запрос, куда то сохранить результат и потом только его показать. В стандартной WebView такой логики не предусмотренно.
&nbspВы потратили на изучение примеров первого ответа 3 минуты и решили, что что-то осталось не понятным? Я приводил ссылки на библиотеки не для того, чтобы вы их использовали не понимая, что там происходит, а для того, чтобы вы могли посмотреть исходный код популярных решений и понять, как они работают.
Как минимум:
1. https://github.com/loopj/android-smart- ... e.java#L44
2. https://github.com/nostra13/Android-Uni ... .java#L124
3. https://github.com/koush/UrlImageViewHe ... er.java#L9
4. https://github.com/koush/UrlImageViewHe ... r.java#L15
Изображение

Аватара пользователя
vornic
Сообщения: 10
Зарегистрирован: 13 мар 2014, 12:34
Откуда: Moldova
Контактная информация:

Re: Виджет: TextView и ImageGetter

Сообщение vornic » 13 мар 2014, 13:32

Вы настоятельно толкаете меня к использованию стороннего решения. Но у меня другая задача, я хочу понять как это работает. На прямые вопросы не отвечаете прямо, лишь косвенно, намёками. Я спросил, правильно ли я понял вас что "WebView, это практически тот же TextView", но получил ответ "Да WebView, это не ImageView" - своеобразный ответ. Для меня как для новичка это не очевидно, и наверное стоило бы ответить в духе - "Да, по сути WebView наследуется от TextView, и он не умеет отображать картинки из рксурса приложения".
На тему по проблеме я основательно гуглил, и все пути ведут к использованию ImageGetter, т.е. это таки возможно. Мои попытки не привели к успеху, по этому, я зарегистрировался тут, чтобы "в живую" пообщаться с опытными людьми и выяснить что не так.


ps вот одно из многочисленных решений из сети: http://stackoverflow.com/questions/3087 ... ew#3087121.
С Уважением, Владимир Ворническу.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Виджет: TextView и ImageGetter

Сообщение altwin » 13 мар 2014, 13:39

vornic писал(а):Вы настоятельно толкаете меня к использованию стороннего решения.
неужели?
altwin писал(а):Вы потратили на изучение примеров первого ответа 3 минуты и решили, что что-то осталось не понятным? Я приводил ссылки на библиотеки не для того, чтобы вы их использовали не понимая, что там происходит, а для того, чтобы вы могли посмотреть исходный код популярных решений и понять, как они работают
Странно...
Ок, повторю. WebView не умеет показывать картинки по url. Вам нужно загрузить картинку и потом показать ее. Все примеры по ссылкам содержат код, который это реализует... Ваша задача не использовать их, а понять, как оно работает. Опять таки.. обратите внимание на то, сколько времени вы тратите на изучение кода между ответами? Там есть все ответы. Все уже написанно. Вам нужно просто понять почему и что написанно. Как я могу дать вам ответ, если вы смотрите на него и не видите?
Здесь можно почитать по Русски, если проблема в языке: http://developer.alexanderklimov.ru/and ... geview.php
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Виджет: TextView и ImageGetter

Сообщение altwin » 13 мар 2014, 13:40

vornic писал(а): ps вот одно из многочисленных решений из сети: http://stackoverflow.com/questions/3087 ... ew#3087121.
Это не многочисленное решение, а очередная реализация одного и того -же принципа. Да вы занимаетесь программированием. Ваша задача изучить их все... и делать это до тех пор, пока вы не поймете почему так происходит. Только изучив сотню чужих решений вы поймете, как сделать свое. Это кратчайший путь.. .иначе вам придется делать не правильно, много спрашивать и в итоге вы всреавно начнете изучать чужие решения...
Изображение

Аватара пользователя
vornic
Сообщения: 10
Зарегистрирован: 13 мар 2014, 12:34
Откуда: Moldova
Контактная информация:

Re: Виджет: TextView и ImageGetter

Сообщение vornic » 13 мар 2014, 13:45

Да, у нас определенно нету взаимопонимания.
Извините что отнял у вас время, прошу вас, больше не отвечайте тут. :(
С Уважением, Владимир Ворническу.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Виджет: TextView и ImageGetter

Сообщение altwin » 13 мар 2014, 13:53

vornic писал(а):Да, у нас определенно нету взаимопонимания.
Извините что отнял у вас время, прошу вас, больше не отвечайте тут. :(
Собственно я и не собирался.. тут больше ответов, чем нужно для реализации. ImageGetter о котором вы говорите и нагуглили - полная чушь. Вы умеете читать ответы? Вы читали ответ в той теме, которую тут привели в ссылке? Вы можете по русски написать тут, что ответили на stackoverflow по поводу Imagegetter в той теме которую вы привели в ссылке?
Вы называете себя новичком и потратили в общей сложности сколько времени на анализ кода который вам тут я приводил??? Что из этого не понятно?:
P.S. не кажется странным приводить тему в вопросе содержащую ImageGetter, единственный ответ о том, что не нужно его использовать и говорить, что именно необходимость его (ImageGetter ) использования вы вынесли из этой темы?
vornic писал(а):т.е. это таки возможно
НЕТ. WebView -это не ImageView. ImageView - показывает картинки. WebView - web контент, путем получения http ответов. В HTTP ответе изображение является потоком байт. WebView не умеет делать из него BitMap. Вам нужно читать основы http, дальше проблем будет больше.
vornic писал(а):Вы настоятельно толкаете меня к использованию стороннего решения.
Я четвертый раз отвечаю на эту фразу:
altwin писал(а):Вы потратили на изучение примеров первого ответа 3 минуты и решили, что что-то осталось не понятным? Я приводил ссылки на библиотеки не для того, чтобы вы их использовали не понимая, что там происходит, а для того, чтобы вы могли посмотреть исходный код популярных решений и понять, как они работают
Изображение

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: Виджет: TextView и ImageGetter

Сообщение mdzht » 20 мар 2014, 22:52

Вы настоятельно толкаете меня к использованию стороннего решения. :lol: :lol: :lol:
Через год произойдет вот что:
1. Вован скажет себе, я тут был не прав
2. А мне пофиг, я уже год как завязал с программированием
3. Повторит этот же вопрос
«Life is too short to spend rewriting code»

siberprogs
Сообщения: 93
Зарегистрирован: 05 мар 2014, 06:20

Re: Виджет: TextView и ImageGetter

Сообщение siberprogs » 21 мар 2014, 09:45

vornic писал(а): в строке встречаются тэги вставки картинки, вот такие: <img src='icon' />
в ресурсах (/res/drawable/) у меня есть картинка icon.png
...но на выходе, на виджете есть всё что нужно кроме картинок, вместо них стоит прямоугольник [obj]. Уже замучался искать способ показать картинку, может знающие люди подскажут :(
Попробуй так:
<img src='/drawable/icon' />
Linux Fedora RFRemix + Intellij Idea

Аватара пользователя
vornic
Сообщения: 10
Зарегистрирован: 13 мар 2014, 12:34
Откуда: Moldova
Контактная информация:

Re: Виджет: TextView и ImageGetter

Сообщение vornic » 21 мар 2014, 10:12

siberprogs писал(а):
vornic писал(а): в строке встречаются тэги вставки картинки, вот такие: <img src='icon' />
в ресурсах (/res/drawable/) у меня есть картинка icon.png
...но на выходе, на виджете есть всё что нужно кроме картинок, вместо них стоит прямоугольник [obj]. Уже замучался искать способ показать картинку, может знающие люди подскажут :(
Попробуй так:
<img src=/drawable/icon.png />

Это ничего не даст, приведу еще раз код, с которым экспериментировал.

Код: Выделить всё

	private class ImageGetter implements Html.ImageGetter {

		public Drawable getDrawable(String source) {
			try{
	            Log.d(TAG, "IMAGE SRC: " + source);

		        LevelListDrawable d = new LevelListDrawable();
//				Drawable empty = getResources().getDrawable(R.drawable.icon);

				String PackName = getPackageName();
				int resID = getResources().getIdentifier("icon", "drawable", PackName);
				Drawable empty = getApplicationContext().getResources().getDrawable(resID);
				
				d.addLevel(0, 0, empty);
				d.setBounds(0, 0, empty.getIntrinsicWidth(), empty.getIntrinsicHeight());

				Log.d(TAG, "PACK: " + PackName+", resID=" + resID + ", empty = "+empty.toString());

				return d;
		   	}catch(Exception e)	{
				e.printStackTrace();
				Log.d(TAG, "ОШИБКА: " + e.getMessage());
			}
			return null;
		 }
	};
...как видно, я начал копать в торону ресурсов, полагая что виджет просто не видит их, эксперименты показали что в активити с этим проблем нет, и TextView прекрасно отображает картинки из ресурсов.
Поясню как работает "getDrawable(String source)", если в тексте встречается тэг картинки, в source мы получаем содержимое аттрибута src (т.е. просто строку со ссылкой на картинку), далее нам нужно обработать эту строку (тут зависит от задачи, или просто извлекаем из ресурса приложения, или качаем из сети). И вот теперь очень любопытно, является ли этот эффект особенностями ограничений виджетов (ведь там нельзя например применять любой стандартный компонент, а лишь определенный круг).

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

siberprogs
Сообщения: 93
Зарегистрирован: 05 мар 2014, 06:20

Re: Виджет: TextView и ImageGetter

Сообщение siberprogs » 21 мар 2014, 12:00

Ну может что-нибудь такое подойдет:http://habrahabr.ru/post/166351/
Linux Fedora RFRemix + Intellij Idea

Аватара пользователя
vornic
Сообщения: 10
Зарегистрирован: 13 мар 2014, 12:34
Откуда: Moldova
Контактная информация:

Re: Виджет: TextView и ImageGetter

Сообщение vornic » 21 мар 2014, 13:24

Спасибо, в статье узнал как работает Html.TagHadler, но статья не по теме. Тут уже главная интрига, почему TextView прекрасно отображает картинки в Activity, и совершенно не хочет этого делать на виджете (AppWidgetProvider). Исследование продолжается... :)
С Уважением, Владимир Ворническу.

Ответить