событие в своем View

Ответить
_ILYA_
Сообщения: 41
Зарегистрирован: 06 окт 2013, 11:49

событие в своем View

Сообщение _ILYA_ » 25 окт 2013, 00:07

есть класс наследован от View. В нем реализованы onDraw, onTouch это все внутри класса.
Объект этого класса размещен в активити, кроме него там еще элементы.
Так вот мне надо что бы активити реагировала на нажатие на мой элемент как на Button . Пробывал обрабатывать событие как в кнопке(урок 10), получаю ошибку времени исполнения.
Может если я создал собственный элемент экрана то и событие надо свое писать и как то перехватывать в активити? Я в джаве не силен и не знаю как это делать.
Я привык в с++ Qt к сигналам и слотам, java только начал изучать и как создавать собственные события и их перехватывать ни где подробно не нашел.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: событие в своем View

Сообщение trew » 25 окт 2013, 10:42

Если твой элемент View присутствует в файле xml, тогда можно попробовать так:
[syntax=java]<Button
android:id="@+id/btnWrite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/write_file"
android:onClick="onclick">
</Button>[/syntax]
Это пример для кнопки, у тебя вместо слова Button будет название твоего компонента.
android:onClick="onclick" -- В коде пишем обработчик этого события.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

_ILYA_
Сообщения: 41
Зарегистрирован: 06 окт 2013, 11:49

Re: событие в своем View

Сообщение _ILYA_ » 25 окт 2013, 12:04

это было первое что я испробовал. Ни каких ошибок, исключений и вообще не работает :cry:

_ILYA_
Сообщения: 41
Зарегистрирован: 06 окт 2013, 11:49

Re: событие в своем View

Сообщение _ILYA_ » 25 окт 2013, 12:11

В своем классе я отключил //this.setOnTouchListener(this); и все заработало :D но
у меня в классе переопределен такой метод, а без this.setOnTouchListener(this); он не работает

Код: Выделить всё

	@Override
	public boolean onTouch(View v, MotionEvent event)
	{
		float x = event.getX();
		float y = event.getY();
		int size = measured / 10;
		
		switch(event.getAction())
		{
		case MotionEvent.ACTION_DOWN:
			// Нажатие
			for(int i = 0; i < 10; i++)
			{
				if((size * i < x) && (size * (i + 1) > x))
					t_x_pos = i;
				if((size * i < y) && (size * (i + 1) > y))
					t_y_pos = i;
			}
			break;
		}
		this.invalidate();
		return true;
	} 

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: событие в своем View

Сообщение KamiSempai » 25 окт 2013, 12:54

Хм... this.setOnTouchListener(this);... Весело тут у вас.
Если View самостоятельно обрабатывает нажатия setOnTouchListener использовать не нужно. Можно просто переопределить метод onTouchEvent.

Код: Выделить всё

public boolean onTouchEvent(MotionEvent event) {
	super.onTouchEvent(event);
	// Дальше свой код
}
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Ответить