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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
#1

Увеличить изображение из HorizontalScrollView - Android

28.05.2013, 20:34. Просмотров 1061. Ответов 10
Метки нет (Все метки)

Я загружаю изображения из сети, после их помещаю в ArrayList и из него эти изображения достаю и помещаю в LinerLoyout в горизонтальном ScrollView. Мне необходимо по нажатию на изображение отлавить, что за картинка нажата, т.е заранее передав ей её id или ещё что нить. У меня в ArrayList хранятся две URL одно на маленькую картинку, второе на большую, но пока я здесь использую маленькую. В коде выглядит String st = (urlFrame.get("thumb")); где "thumb" маленькая а, "big" большая.

вот код:
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
public void getFrame() {
        framesList = new ArrayList<HashMap<String, String>>();
        try {
            JSONParser jParserCat = new JSONParser();
    JSONObject jsonMeTopCategory = jParserCat.getJSONFromUrl(url);
            try {
    categoryArray = jsonMeTopCategory.getJSONArray("contents");
 
                for (int n = 0; n < categoryArray.length(); n++) {
 
                    JSONObject c = categoryArray.getJSONObject(n);
 
                    JSONObject content1 = c.getJSONObject("content");
 
                    String id_content = content1.getString("id");
 
                            if (id_content.equals(myIdNextContentGot)) {
 
categoryArray2 = content1.getJSONArray("frames");
 
                        for (int n2 = 0; n2 < categoryArray2.length(); n2++) {
 
                            JSONObject c2 = categoryArray2.getJSONObject(n2);
 
                            JSONObject content2 = c2.getJSONObject("frame");
                            String nameFrameThumb = content2.getString("thumb");
                            String nameFrameBig = content2.getString("big");
 
                            mapMY = new HashMap<String, String>(); // добавил
 
                            mapMY.put(KEY_1_FRAME_THUMB, nameFrameThumb);
                            mapMY.put(KEY_2_FRAME_BIG, nameFrameBig);
 
                            framesList.add(mapMY);
 
                        }
                    
                    }
    }
 
            } catch (Exception e) {
                // TODO: handle exception
            }
 
                } catch (Exception e) {
            e.printStackTrace();
        }
 
        in = 0;
        myGallery.removeAllViews(); // очищает макет (LinearLoyout)
        for (int i = 0; i < framesList.size(); i++) {
            myGallery.addView(insertPhoto());
        }
 
    }
 
View insertPhoto() {
 
        HashMap<String, String> urlFrame = new HashMap<String, String>();
 
        urlFrame = framesList.get(in);
        in++;
 
        String st = (urlFrame.get("thumb"));
 
        Bitmap bm = null;
        bm = ImageManager.downloadImage(st);
 
        LinearLayout layout = new LinearLayout(getActivity());
        layout.setLayoutParams(new LayoutParams(65, 56)); // 250, 250
        layout.setGravity(Gravity.CENTER);
 
        ImageView imageView = new ImageView(getActivity());
        imageView.setLayoutParams(new LayoutParams(45, 45)); // 220, 220
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setImageBitmap(bm);
 
        layout.addView(imageView);
        
        imageView.setOnClickListener(new OnClickListener(){
 
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(), 
                        "Clicked - " + getId(), 
                        Toast.LENGTH_LONG).show();
            }});
        
        
        return layout;
    }
первый метод это загрузка и парсинг данных из сети, второй собственно загрузка изображений в ScrollView. Изображения загружаю с помощью ImageManager, вот код класса:
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
public class ImageManager {
  private final static String TAG = "ImageManager";
 
  /** Private constructor prevents instantiation from other classes */
  ImageManager () {}
 
  public static void fetchImage(final String iUrl, final ImageView iView) {
    if ( iUrl == null || iView == null )
      return;
 
    final Handler handler = new Handler() {
      @Override
      public void handleMessage(Message message) {
        final Bitmap image = (Bitmap) message.obj;
        iView.setImageBitmap(image);
      }
    };
 
    final Thread thread = new Thread() {
      @Override
      public void run() {
        final Bitmap image = downloadImage(iUrl);
        if ( image != null ) {
          Log.v(TAG, "Got image by URL: " + iUrl);
          final Message message = handler.obtainMessage(1, image);
          handler.sendMessage(message);
        }
      }
    };
    iView.setImageResource(R.drawable.ic_launcher);
    thread.setPriority(3);
    thread.start();
  }
 
  public static Bitmap downloadImage(String iUrl) {
    Bitmap bitmap = null;
    HttpURLConnection conn = null;
    BufferedInputStream buf_stream = null;
    try {
      Log.v(TAG, "Starting loading image by URL: " + iUrl);
      conn = (HttpURLConnection) new URL(iUrl).openConnection();
      conn.setDoInput(true);
      conn.setRequestProperty("Connection", "Keep-Alive");
      conn.connect();
      buf_stream = new BufferedInputStream(conn.getInputStream(), 8192);
      bitmap = BitmapFactory.decodeStream(buf_stream);
      buf_stream.close();
      conn.disconnect();
      buf_stream = null;
      conn = null;
    } catch (MalformedURLException ex) {
      Log.e(TAG, "Url parsing was failed: " + iUrl);
    } catch (IOException ex) {
      Log.d(TAG, iUrl + " does not exists");
    } catch (OutOfMemoryError e) {
      Log.w(TAG, "Out of memory!!!");
      return null;
    } finally {
      if ( buf_stream != null )
        try { buf_stream.close(); } catch (IOException ex) {}
      if ( conn != null )
        conn.disconnect();
    }
    return bitmap;
  }
}
надеюсь правильно сформулировал то, что я хочу.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
28.05.2013, 21:04     Увеличить изображение из HorizontalScrollView #2
используйте setTag()/getTag().
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
28.05.2013, 21:42  [ТС]     Увеличить изображение из HorizontalScrollView #3
Цитата Сообщение от V0v1k Посмотреть сообщение
используйте setTag()/getTag().
это я понимаю, вот только как использовать не знаю. Без Адаптера обойтись можно?

Добавлено через 26 минут
хоть направьте на путь истинный.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
28.05.2013, 21:46     Увеличить изображение из HorizontalScrollView #4
советую поискать готовые решения для просмотра картинок. единственное что есть в андроиде - это Galery, и та застарела.

Добавлено через 23 секунды
или учитесь писать кастомные View
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
28.05.2013, 21:52  [ТС]     Увеличить изображение из HorizontalScrollView #5
Галерею использовать нельзя, поэтому использую ScrollView.

Цитата Сообщение от V0v1k Посмотреть сообщение
советую поискать готовые решения для просмотра картинок.
как картинку уже открыть в другом окне, это я уже сделаю, мне главное Url нужный получить по нажатию, который я уже даже записываю в ArrayList.

Цитата Сообщение от V0v1k Посмотреть сообщение
или учитесь писать кастомные View
Ну а если в моем случае, наиболее простой выход и всё-таки через setTag()/getTag() без адаптера получится сделать?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
28.05.2013, 21:54     Увеличить изображение из HorizontalScrollView #6
Цитата Сообщение от Stylish2013 Посмотреть сообщение
как картинку уже открыть в другом окне, это я уже сделаю, мне главное Url нужный получить по нажатию, который я уже даже записываю в ArrayList.
для этого используйте setTag()/getTag()

кстати, а обычный ListView вам не подойдет?
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
28.05.2013, 22:07  [ТС]     Увеличить изображение из HorizontalScrollView #7
Цитата Сообщение от V0v1k Посмотреть сообщение
для этого используйте setTag()/getTag()
этой фразой вы меня обнадеживаете )\


Цитата Сообщение от V0v1k Посмотреть сообщение
кстати, а обычный ListView вам не подойдет?
уже сделал не через List и если его использовать то это использовать кастомный адаптер переделывать его под горизонтальную прокрутку, делов ещё больше. А мой вариант разве очень плох?

Добавлено через 5 минут
И всё-таки я не понимаю где мне нужно исходя из моего кода присвоить setTag(id); чтоб потом получить. Пожалуйста напишите небольшой примерчик.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
28.05.2013, 22:11     Увеличить изображение из HorizontalScrollView #8
а, так вам нужна горизонтальная прокрутка...


Цитата Сообщение от Stylish2013 Посмотреть сообщение
И всё-таки я не понимаю где мне нужно исходя из моего кода присвоить setTag(id); чтоб потом получить.
Java
1
2
imageView.setTag(url);
layout.addView(imageView);
Java
1
2
3
4
@Override
public void onClick(View v) {
           String url = (String)v.getTag();
}
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
28.05.2013, 23:16  [ТС]     Увеличить изображение из HorizontalScrollView #9
Цитата Сообщение от V0v1k Посмотреть сообщение
а, так вам нужна горизонтальная прокрутка...
ага

А мне не нужно создавать отдельный класс модель, сеттеров и геттеров ???
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
28.05.2013, 23:20     Увеличить изображение из HorizontalScrollView #10
вам лучше знать что вам нужно)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 23:31     Увеличить изображение из HorizontalScrollView
Еще ссылки по теме:

Как увеличить скорость бегущей строки андроид? Android
GPS увеличить точность Android
Векторное изображение Android
Как увеличить всю страницу пальцами, вместе с кнопками текстом и изображениями? Android
Максимально увеличить один элемент в Gridlayout и сжать до минимума остальные Android

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

Или воспользуйтесь поиском по форуму:
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
28.05.2013, 23:31  [ТС]     Увеличить изображение из HorizontalScrollView #11
Цитата Сообщение от V0v1k Посмотреть сообщение
вам лучше знать что вам нужно)
вроде как не нужно.
Yandex
Объявления
28.05.2013, 23:31     Увеличить изображение из HorizontalScrollView
Ответ Создать тему
Опции темы

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