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

Снова ImageView - Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Yushka
4 / 4 / 1
Регистрация: 24.07.2013
Сообщений: 80
02.08.2013, 11:32     Снова ImageView #1
Значит, ситуация такая:
создаю IV, ставлю в определённое место, запускаю покадровую анимацию. После анимации требуется нажать на картинку и запустить дальнейшее происходящее. Так вот, на вьюшку, с которой запускаю анимацию, вешала и онклик и онтач, но ничего не работает..не знаю, как решить эту проблему. Может, у кого-то есть идеи?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MegaSinner
 Аватар для MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
02.08.2013, 20:40     Снова ImageView #2
Цитата Сообщение от Yushka Посмотреть сообщение
онклик
Если вы о сет_онклик_листенере, то попробуйте в редакторе леяута повесить функцию обработки нажатия, так правильнее. А вопще сорец покажите..
Yushka
4 / 4 / 1
Регистрация: 24.07.2013
Сообщений: 80
05.08.2013, 15:31  [ТС]     Снова ImageView #3
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();  //ну а тут стартуем анимацию
Вот и надо после того, как сработала анимация (остался последний кадр), повесить нажатие на него. Как - неизвестно (мне).
MegaSinner
 Аватар для MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
05.08.2013, 17:14     Снова ImageView #4
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;
    }
});
Yushka
4 / 4 / 1
Регистрация: 24.07.2013
Сообщений: 80
05.08.2013, 17:20  [ТС]     Снова ImageView #5
Ну вот я говорила, что вешала и онтач и онклик на bird. Но оно не срабатывает. Есть мысль, что не срабатывает потому, что кадр последний остаётся (он отличен от bird), но на этом список гениальных мыслей и идей заканчивается. И как сделать, чтобы эти методы срабатывали - тоже тайна пока что=(.
MegaSinner
 Аватар для MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
05.08.2013, 21:06     Снова ImageView #6
Yushka, вот если бы имага создавалась не динамически, а в десигнере, то в хмл можно было бы повесить клик, который работал бы 100%..
verylazy
Заблокирован
05.08.2013, 21:11     Снова ImageView #7
а можно кусок кода вместе с
на вьюшку, с которой запускаю анимацию, вешала и онклик и онтач,
?
Yushka
4 / 4 / 1
Регистрация: 24.07.2013
Сообщений: 80
05.08.2013, 21:23  [ТС]     Снова ImageView #8
Кусок кода выше. Вешала тем же методом, что тут предлагали.
verylazy
Заблокирован
05.08.2013, 21:26     Снова ImageView #9
я тоже могу написать do {} while и сказать - клянусь, там внутри цикла вычисляло число пи до миллиардного знака
ну да ладно, зря полез
Yushka
4 / 4 / 1
Регистрация: 24.07.2013
Сообщений: 80
06.08.2013, 10:36  [ТС]     Снова ImageView #10
Не могу так, как Вы предлагаете, потому что расчёт позиций производится по формулам. Иначе не будет всё стоять там, где это нужно. (Все лэйауты не помогут, ставлю относительно фона, учитывая размеры экрана, а не относительно размеров экрана и других элементов)

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

Добавлено через 13 часов 6 минут
Кстати, странно, но без анимации тоже не работает оО.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
06.08.2013, 11:25     Снова ImageView #11
Для того, чтобы узнать когда заканчивается покадровая анимация, есть 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);
Yushka
4 / 4 / 1
Регистрация: 24.07.2013
Сообщений: 80
06.08.2013, 11:34  [ТС]     Снова ImageView #12
Спасибо, я думаю, это пригодится=) Но, к сожалению, не является решением текущей проблемы, так как выяснилось, что и без запуска анимации почему-то не срабатывают ни онклик ни онтач, что меня удивило.
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);
    }
Может, из-за нового лэйаута не срабатывает?...
verylazy
Заблокирован
06.08.2013, 12:11     Снова ImageView #13
я бы на входе в метод onTouch, до switch вставил бы System.out.println("пыщ-пыщ");
для начала
Yushka
4 / 4 / 1
Регистрация: 24.07.2013
Сообщений: 80
06.08.2013, 13:14  [ТС]     Снова ImageView #14
К счастью, необходимость в решении отпала, но я поковыряюсь как-нибудь сама и обязательно ещё вернусь к этому вопросу. А пока всем спасибо=). Но, всё-таки интересно, что делать в случае, если on Touch не срабатыват вообще (если, например, "дебаг", предложенный verylazy, это покажет).
MegaSinner
 Аватар для MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
06.08.2013, 14:21     Снова ImageView #15
Цитата Сообщение от Yushka Посмотреть сообщение
Может, из-за нового лэйаута не срабатывает?...
- если переключаться между леяутами, то онтач/клик ОТВАЛИТСЯ. Только если через хмл прописан, то будет работать..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2013, 15:07     Снова ImageView
Еще ссылки по теме:

На счет ImageView Android
Сохранение ImageView Android
Баг с imageView Android
Android ImageView
Android Таблица из ImageView

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

Или воспользуйтесь поиском по форуму:
Yushka
4 / 4 / 1
Регистрация: 24.07.2013
Сообщений: 80
06.08.2013, 15:07  [ТС]     Снова ImageView #16
Цитата Сообщение от MegaSinner Посмотреть сообщение
- если переключаться между леяутами, то онтач/клик ОТВАЛИТСЯ. Только если через хмл прописан, то будет работать..
Спасибо, буду иметь в виду.
Yandex
Объявления
06.08.2013, 15:07     Снова ImageView
Ответ Создать тему
Опции темы

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