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

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

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

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

28.05.2013, 20:34. Просмотров 1078. Ответов 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;
  }
}
надеюсь правильно сформулировал то, что я хочу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 20:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Увеличить изображение из HorizontalScrollView (Программирование Android):

Вложенный HorizontalScrollView в ScrollView с общим свайпом - Программирование Android
Есть вложенный HorizontalScrollView в ScrollView. В общем суть проблемы - если начать скролить по горизонтали, то двигая палец вверх/вниз...

LinerLayout не полностью заполняет HorizontalScrollView при ширине и длине "match_parent" - Программирование Android
LinerLayout не полностью заполняет HorizontalScrollView при ширине и длине &quot;match_parent&quot; При том если расположить эту же конструкцию...

увеличить изображение в mathcad - MathCAD
загрузил матрицу изображения и не знаю как увеличить изображение, помогите плз

Увеличить вращающееся изображение в opera 12 - HTML, CSS
Здравствуйте, не могу для оперы12 написать css. Что нужно: при наведении на вращающуюся картинку она должна увеличиться и продолжить...

Увеличить изображение в два раза - C#
Добрый день! Задача: есть изображение, нужно увеличить его в два раза. Пока что просто хочу создать массив из исходного изображения и...

Как увеличить и улучшить изображение? - Видеопрограммы
Такая ситуация, имеется видео запись, необходимо увеличить определенное место и самое главное, сделать после зума нормальное изображение. С...

10
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
28.05.2013, 21:04 #2
используйте setTag()/getTag().
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
28.05.2013, 21:42  [ТС] #3
Цитата Сообщение от V0v1k Посмотреть сообщение
используйте setTag()/getTag().
это я понимаю, вот только как использовать не знаю. Без Адаптера обойтись можно?

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

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

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

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

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


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

Добавлено через 5 минут
И всё-таки я не понимаю где мне нужно исходя из моего кода присвоить setTag(id); чтоб потом получить. Пожалуйста напишите небольшой примерчик.
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
28.05.2013, 22:11 #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();
}
1
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
28.05.2013, 23:16  [ТС] #9
Цитата Сообщение от V0v1k Посмотреть сообщение
а, так вам нужна горизонтальная прокрутка...
ага

А мне не нужно создавать отдельный класс модель, сеттеров и геттеров ???
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
28.05.2013, 23:20 #10
вам лучше знать что вам нужно)
0
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
28.05.2013, 23:31  [ТС] #11
Цитата Сообщение от V0v1k Посмотреть сообщение
вам лучше знать что вам нужно)
вроде как не нужно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 23:31
Привет! Вот еще темы с ответами:

Увеличить изображение как в Paint - C++ Builder
Как увеличить изображение как в Paint?

Увеличить изображение при нажатии - PHP
Добрый день, подскажите пожалуйста, как увеличить изображение при нажатии. Ниже код отображения картинки: &lt;tr&gt; &lt;?...

Увеличить\уменьшить изображение в PictureBox - Visual Basic .NET
Как можно это организовать с помощью MouseWheel

Увеличить BMP изображение в два раза - C++
Дано задание увеличить 8-битное BMP изображение в два раза. Функцию реализовать в классе. После некоторых размышлений получился сий код=)...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
28.05.2013, 23:31
Ответ Создать тему
Опции темы

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