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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Adeveloper
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 6
#1

OnTouch траблы с viewflipper и viewpager - Программирование Android

01.03.2013, 18:44. Просмотров 1844. Ответов 6
Метки нет (Все метки)

Доброго всем времени суток!
Помогите разобраться, в чем беда.

Пытаюсь использовать для свайпинга viewflipper или viewpager. в обоих случаях получаю одну траблу. если в качестве страниц для перелистывания использовать лайауты с какими-то элементами (кнопками и т.д.) и присвоить обработчик OnTouchListener какому-то компоненту(view) на лайауте, то при нажатии на этот view не вызывается обработчик касания.
и еще возникают трудности при присваивании обработчика компоненту на лайауте который в данный момент не установлен функцией setContent.
можно установить обработчик флипперу, пэйджеру, их дочерним компонентам (в моем случае лайаутам, которые перелистываются), а компонентам дочерних кмпонентов уже нельзя. то есть нельзя написать так
Код
flipper.getChildAt(0).getChildAt.setOnTTouchListener(0)
чтобы установить обработик касания на, например, кнопку на одном из лайаутов флиппера или пэйджера.
вот у меня вопрос, как корректно присвоить обработчик касания в таком случае?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2013, 18:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос OnTouch траблы с viewflipper и viewpager (Программирование Android):

Тормозит ViewFlipper - Программирование Android
нужно реализовать прокрутку картинок. Картинки лежат в ресурсах. Для прокрутки использую ViewFlipper. Флиппер тормозит. Уже день...

registerForContextMenu и ontouch - Программирование Android
Здравствуйте! Столкнулся с проблемой: при единичном нажатии на экран, срабатывает OnTouch public boolean onTouch(View v,...

OnTouch и onLongClick - Программирование Android
вот есть ImageButon btnAdd @Override public boolean onTouch(final View view, MotionEvent motionEvent) { switch...

Вылет onTouch(), перетаскивание - Программирование Android
Хочу сделать так, что при перемещении картинки видел ее координаты. В чем ошибка? Спасибо. protected void onCreate(Bundle...

Программный вызов onTouch - Программирование Android
В игре после завершения уровня для перехода в следующий нужно сделать один клик (событие Down) Хочу сделать автоматический клик. В...

OnTouch на элементе меню - Программирование Android
как присвоить setOnTouchListener элементу меню?

6
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
01.03.2013, 19:39 #2
если я правильно понял,то:
у меня есть ViewPager он содержит GridView в GridView есть ImageView так задаю обработку нажатия по ImageView
Java
1
2
3
4
5
6
GridView gv = (GridView)v.findViewById(id);
gv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                ImageView vi = (ImageView)v;
            }
        });
добавляю GridView to ViewPager
Java
1
2
3
4
5
6
7
8
9
ViewPager vp = (ViewPager)findViewById(R.id.v4);
        List<View> lv = new ArrayList<View>();
        lv.add(gv);
                lv.add(gv2);
                lv.add(gv3);
        WPageAdapter wp = new WPageAdapter(lv,this);
        vp.setAdapter(wp);
        vp.setCurrentItem(1);
        vp.setOnPageChangeListener(this);
1
Adeveloper
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 6
01.03.2013, 23:49  [ТС] #3
Цитата Сообщение от lavan Посмотреть сообщение
если я правильно понял,то:
у меня есть ViewPager он содержит GridView в GridView есть ImageView так задаю обработку нажатия по ImageView
Java
1
2
3
4
5
6
GridView gv = (GridView)v.findViewById(id);
gv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                ImageView vi = (ImageView)v;
            }
        });
добавляю GridView to ViewPager
Java
1
2
3
4
5
6
7
8
9
ViewPager vp = (ViewPager)findViewById(R.id.v4);
        List<View> lv = new ArrayList<View>();
        lv.add(gv);
                lv.add(gv2);
                lv.add(gv3);
        WPageAdapter wp = new WPageAdapter(lv,this);
        vp.setAdapter(wp);
        vp.setCurrentItem(1);
        vp.setOnPageChangeListener(this);
не могли бы вы более детально обьяснить
0
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
02.03.2013, 12:27 #4
у меня есть ViewPager в котором находится GredView а в GredView находятся ImageView.
что бы поместить нужный компонент в ViewPager надо наследоваться от PagerAdapter. чтобы отлавливать события ViewPager(листание страниц) надо реализовать интерфейс ViewPager.OnPageChangeListener
Java
1
2
3
4
5
6
7
8
9
10
ViewPager vp = (ViewPager)findViewById(R.id.v4);
        List<View> lv = new ArrayList<View>();//что будет храниться
        lv.add(gv);//0
                lv.add(gv2);//1
                lv.add(gv3);//2
//всего будет 3 страницы
        WPageAdapter wp = new WPageAdapter(lv,this);//класс расширяющий PagerAdapter
        vp.setAdapter(wp);
        vp.setCurrentItem(1);//какая страница появится при загрузке
        vp.setOnPageChangeListener(Class implements  ViewPager.OnPageChangeListener);//
для помещения ImageView в GredView наследуетесь от BaseAdapter
0
Adeveloper
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 6
02.03.2013, 22:19  [ТС] #5
Попытаюсь спросить на примере.
Вот мой исходник:

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
public class MyClass extends Activity implements OnTouchListener{
    RelativeLayout secondl;
        DigitalClock clock;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.second);
            clock=(DigitalClock)findViewById(R.id._clock);
                clock.setOnTouchListener(this);       
            
            LayoutInflater inflater = LayoutInflater.from(this);
            List<View> pages = new ArrayList<View>();
            
            View page = inflater.inflate(R.layout.first, null);
            pages.add(page);
            
            page = inflater.inflate(R.layout.second, null);
            pages.add(page);
            
            page = inflater.inflate(R.layout.third, null);
            pages.add(page);
            
            SamplePagerAdapter pagerAdapter = new SamplePagerAdapter(pages);
            ViewPager viewPager = new ViewPager(this);
            viewPager.setAdapter(pagerAdapter);
            viewPager.setCurrentItem(1);
               
             setContentView(viewPager);
             
           
        }
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int i=v.getId();
            return false;
        }
У меня два вопроса.
1. Clock у меня находится в лайауте с id second.Почему я не могу присвоить обработчик клоку или этому лайауту, пока не вызову setContentView(R.layout.second)?
2. Почему при нажатии на часы не срабатывает событие OnTouch? На моем примере мне может кто-нибудь обьяснить?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.03.2013, 23:02 #6
Цитата Сообщение от Adeveloper Посмотреть сообщение
1. Clock у меня находится в лайауте с id second.Почему я не могу присвоить обработчик клоку или этому лайауту, пока не
Java
1
вызову setContentView(R.layout.second)?
Java
1
2
3
page = inflater.inflate(R.layout.second, null);
View clock = page.findViewById(R.id.clock);
clock.setOnClickListener(...);
Добавлено через 2 минуты
Java
1
2
3
page = inflater.inflate(R.layout.second, null);
View clock = page.findViewById(R.id.clock);
clock.setOnClickListener(...);
это решит оба вопроса.

Добавлено через 1 минуту
точнее
Java
1
clock.setOnTouchListener(this);
Добавлено через 44 секунды
а еще не забывайте, что если clock это лаяут на котором находятся другие View, то эти View могут обработать тач и этот тач уже не получит ваш лаяут.

Добавлено через 23 минуты
сори, еще нужен каст к ViewGroup

Java
1
View clock = ((ViewGroup)page).findViewById(R.id.clock);
1
Adeveloper
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 6
02.03.2013, 23:51  [ТС] #7
спасибо всем, кто помог, ваши советы мне помогли
0
02.03.2013, 23:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2013, 23:51
Привет! Вот еще темы с ответами:

OnTouch из активити для View - Программирование Android
В активити прописан метод onTouch. Что нужно написать чтобы добавленные View так же вызывали выполнение кода при прикосновении

Одновременное срабатывание onTouch и onItemLongClick - Программирование Android
Добрый день, коллеги, Есть два обработчика: OnTouchListener и onItemLongClickListener. Первый нужен для определения свайпа элемента...

OnTouch узнать цвет пикселя - Программирование Android
Добрый день, форумчане! Начал как хобби изучать андройд программирование. Работаю в Android studio. Сейчас создал проект с Draw2D с...

Использование разных onTouch для двух Layout элемента - Программирование Android
В одном Layout имеются два дочерних элемента LinearLayout. Как обработать метод onTouch для каждого отдельно? То есть листать первый и...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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