Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
4 / 4 / 0
Регистрация: 24.07.2013
Сообщений: 80

Снова ImageView

02.08.2013, 11:32. Показов 2108. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Значит, ситуация такая:
создаю IV, ставлю в определённое место, запускаю покадровую анимацию. После анимации требуется нажать на картинку и запустить дальнейшее происходящее. Так вот, на вьюшку, с которой запускаю анимацию, вешала и онклик и онтач, но ничего не работает..не знаю, как решить эту проблему. Может, у кого-то есть идеи?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.08.2013, 11:32
Ответы с готовыми решениями:

Скопировать картинку из одной ImageView в другую ImageView
В ImageView поставлена картинка методом setImageResource. По нажатию на неё, нужно такую-же картинку поставить в другую вью, а в первой...

ImageView
Добрый день. Вы не подскажите, как передать изображение из одного ImageView в Другой. Допустим есть три картинки в папке drawable и одна...

ImageView
Добрый день ! Делал проект с нуля, все как обычно, но при поиске id для ImageView мне вдруг выдает : The method findByViewId(int) is...

15
 Аватар для MegaSinner
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746
02.08.2013, 20:40
Цитата Сообщение от Yushka Посмотреть сообщение
онклик
Если вы о сет_онклик_листенере, то попробуйте в редакторе леяута повесить функцию обработки нажатия, так правильнее. А вопще сорец покажите..
0
4 / 4 / 0
Регистрация: 24.07.2013
Сообщений: 80
05.08.2013, 15:31  [ТС]
Java
1
2
3
4
5
6
7
8
//Работа с птицей
         CountPosSize(BirdX, BirdY, BirdW, BirdH);  //тут позиции считаем
         bird=new ImageView(this);
         bird.setImageResource(R.drawable.zero);
         bird.setBackgroundResource(R.anim.anim_bird);
         AnimationDrawable animationBird=(AnimationDrawable)bird.getBackground();
         SetPosSize(bird);  //тут запихиваем по рассчитанным позициям картинку
         animationBird.start();  //ну а тут стартуем анимацию
Вот и надо после того, как сработала анимация (остался последний кадр), повесить нажатие на него. Как - неизвестно (мне).
0
 Аватар для MegaSinner
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746
05.08.2013, 17:14
Yushka, после 3-й строки вот это надо вставить:
Java
1
2
3
4
5
6
7
8
9
10
11
bird.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP){
 
            // обработка нажатия
            return true;
        }
        return false;
    }
});
0
4 / 4 / 0
Регистрация: 24.07.2013
Сообщений: 80
05.08.2013, 17:20  [ТС]
Ну вот я говорила, что вешала и онтач и онклик на bird. Но оно не срабатывает. Есть мысль, что не срабатывает потому, что кадр последний остаётся (он отличен от bird), но на этом список гениальных мыслей и идей заканчивается. И как сделать, чтобы эти методы срабатывали - тоже тайна пока что=(.
0
 Аватар для MegaSinner
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746
05.08.2013, 21:06
Yushka, вот если бы имага создавалась не динамически, а в десигнере, то в хмл можно было бы повесить клик, который работал бы 100%..
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
05.08.2013, 21:11
а можно кусок кода вместе с
на вьюшку, с которой запускаю анимацию, вешала и онклик и онтач,
?
0
4 / 4 / 0
Регистрация: 24.07.2013
Сообщений: 80
05.08.2013, 21:23  [ТС]
Кусок кода выше. Вешала тем же методом, что тут предлагали.
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
05.08.2013, 21:26
я тоже могу написать do {} while и сказать - клянусь, там внутри цикла вычисляло число пи до миллиардного знака
ну да ладно, зря полез
0
4 / 4 / 0
Регистрация: 24.07.2013
Сообщений: 80
06.08.2013, 10:36  [ТС]
Не могу так, как Вы предлагаете, потому что расчёт позиций производится по формулам. Иначе не будет всё стоять там, где это нужно. (Все лэйауты не помогут, ставлю относительно фона, учитывая размеры экрана, а не относительно размеров экрана и других элементов)

Добавлено через 2 минуты
verylazy
Я не понимаю, что ещё не хватает Вам=) Тот кусок кода ВЕСЬ. Больше нет ничего, связанного с моим вопросом. bird.setOnClickListener и bird.setOnTouchListener в коде не присутствуют, так как не работают. Вьюшка там есть, анимация там есть. Слушателей и обработчиков нет - не работают они, не срабатывают, пробовала. Что, написать Toast, который был внутри слушателей?)

Добавлено через 13 часов 6 минут
Кстати, странно, но без анимации тоже не работает оО.
0
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
06.08.2013, 11:25
Для того, чтобы узнать когда заканчивается покадровая анимация, есть 2 варианта:
1. Рекурсивная проверка. Надо вызывать этот метод с аргументом animationBird
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void checkIfAnimationDone(AnimationDrawable anim){
        final AnimationDrawable a = anim;
        int timeBetweenChecks = 300;
        Handler h = new Handler();
        h.postDelayed(new Runnable(){
            public void run(){
                if (a.getCurrent() != a.getFrame(a.getNumberOfFrames() - 1)){
                    checkIfAnimationDone(a);
                } else{
                    Toast.makeText(getApplicationContext(), "ANIMATION DONE!", Toast.LENGTH_SHORT).show();
                }
            }
        }, timeBetweenChecks);
    };
2. Так как мы знаем длительность анимации, можно запустить TimerTask. Добавьте этот код после строчки animationBird.start()

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 long totalDuration = 0;  
      for(int i = 0; i< animationBird.getNumberOfFrames();i++){  
       totalDuration += animationBird.getDuration(i);  
      }  
      Timer timer = new Timer();  
  
   TimerTask timerTask = new TimerTask(){  
       @Override  
       public void run() {
                 //Animation stop here
                  animationBird.stop(); 
                           }  
      }};  
   timer.schedule(timerTask, totalDuration);
0
4 / 4 / 0
Регистрация: 24.07.2013
Сообщений: 80
06.08.2013, 11:34  [ТС]
Спасибо, я думаю, это пригодится=) Но, к сожалению, не является решением текущей проблемы, так как выяснилось, что и без запуска анимации почему-то не срабатывают ни онклик ни онтач, что меня удивило.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 CountPosSize(BirdX, BirdY, BirdW, BirdH);
         bird=new ImageView(this);
         bird.setImageResource(R.drawable.bset);
         SetPosSize(bird);        
         bird.setOnTouchListener(new View.OnTouchListener() {
             @Override
             public boolean onTouch(View v, MotionEvent event) {
                 switch (event.getAction()) {
 
                     case MotionEvent.ACTION_UP:
                      Toast.makeText(getApplicationContext(), "ololo", Toast.LENGTH_LONG);                    
                     break;
                 }
                 return true;
             }
         });
Методы используемые:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 private void CountPosSize(double pX, double pY, double sX, double sY){
        //расчёт позиций
        double dposX=(w/800)*pX;  //w и h - размеры используемого экрана
        double dposY=(h/480)*pY;
        //расчёт размера
        double dsizeX=w/(800/sX);
        double dsizeY=h/(480/sY);
        //приведение к инту (тк пиксели не могут быть нецелыми)
        posX=(int)dposX;
        posY=(int)dposY;
        sizeX=(int)dsizeX;
        sizeY=(int)dsizeY;
    }
    //метод, помещающий изображение в расчитанные позиции и масштабирующий его
    private void SetPosSize(ImageView iv){
        RelativeLayout mm= (RelativeLayout) findViewById(R.id.first_lay);
        RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(sizeX, sizeY);
        params.leftMargin=posX;
        params.topMargin=posY;
        mm.addView(iv, params);
    }
Может, из-за нового лэйаута не срабатывает?...
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
06.08.2013, 12:11
я бы на входе в метод onTouch, до switch вставил бы System.out.println("пыщ-пыщ");
для начала
0
4 / 4 / 0
Регистрация: 24.07.2013
Сообщений: 80
06.08.2013, 13:14  [ТС]
К счастью, необходимость в решении отпала, но я поковыряюсь как-нибудь сама и обязательно ещё вернусь к этому вопросу. А пока всем спасибо=). Но, всё-таки интересно, что делать в случае, если on Touch не срабатыват вообще (если, например, "дебаг", предложенный verylazy, это покажет).
0
 Аватар для MegaSinner
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746
06.08.2013, 14:21
Цитата Сообщение от Yushka Посмотреть сообщение
Может, из-за нового лэйаута не срабатывает?...
- если переключаться между леяутами, то онтач/клик ОТВАЛИТСЯ. Только если через хмл прописан, то будет работать..
0
4 / 4 / 0
Регистрация: 24.07.2013
Сообщений: 80
06.08.2013, 15:07  [ТС]
Цитата Сообщение от MegaSinner Посмотреть сообщение
- если переключаться между леяутами, то онтач/клик ОТВАЛИТСЯ. Только если через хмл прописан, то будет работать..
Спасибо, буду иметь в виду.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.08.2013, 15:07
Помогаю со студенческими работами здесь

ImageView
Подскажите как правильно выводить картинку из URL Вроде нашел какой то пример в сети, но что то не работает. Да и почитав, понял что...

ImageView вращение
Как повернуть программно ImageView на 0-360 градусов понятно , а вот как повернуть его еще и в других плоскостях? То есть 3D вращение????

Квадратный ImageView
Как заставить ImageView всегда быть квадратным и при этом максимального размера (расширяться до границ Activity) ?

Координаты ImageView
Всем привет, хочу попросить у вас помощи, проблема заключается в следующем: У нас есть приложение в Android Studio, ну так же имеются...

Таблица из ImageView
Как сделать 9 картинок 3х3, чтобы между ними не было отступов. Точнее я знаю как, вопрос в другом. Как указать android:layout_height...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru