Страница 1 из 1

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

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

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

Добавлено: 25 окт 2013, 10:42
trew
Если твой элемент 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" -- В коде пишем обработчик этого события.

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

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

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

Добавлено: 25 окт 2013, 12:11
_ILYA_
В своем классе я отключил //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;
	} 

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

Добавлено: 25 окт 2013, 12:54
KamiSempai
Хм... this.setOnTouchListener(this);... Весело тут у вас.
Если View самостоятельно обрабатывает нажатия setOnTouchListener использовать не нужно. Можно просто переопределить метод onTouchEvent.

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

public boolean onTouchEvent(MotionEvent event) {
	super.onTouchEvent(event);
	// Дальше свой код
}