Урок 9. Обработчики событий на примере Button.

Обсуждение уроков
Milker
Сообщения: 12
Зарегистрирован: 18 апр 2012, 22:54

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Milker » 07 авг 2012, 15:25

rezak90 писал(а):так вроде как и ничего сложного что ле... просто повесить на картинку обработчик onClick и в теле метода вызвать другое активити. Но это если нужно слышать щелчек по всей картинке, если же только на отдельной части картинки то это уже проблема (первое что приходит в голову так это разбить картинку на несколько картинок, при том что картинка не сложная) ... как то так.
Картинку, к сожалению разбить сложо. Тем более, что предполагается использовать на разных разрешениях экрана. А вот из onClick можно узнать координату?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 9. Обработчики событий на примере Button.

Сообщение rezak90 » 07 авг 2012, 15:41

Milker писал(а):
rezak90 писал(а):так вроде как и ничего сложного что ле... просто повесить на картинку обработчик onClick и в теле метода вызвать другое активити. Но это если нужно слышать щелчек по всей картинке, если же только на отдельной части картинки то это уже проблема (первое что приходит в голову так это разбить картинку на несколько картинок, при том что картинка не сложная) ... как то так.
Картинку, к сожалению разбить сложо. Тем более, что предполагается использовать на разных разрешениях экрана. А вот из onClick можно узнать координату?
Реализуй кастомноую вьюху для изображения и в ней переопредели метод onTouchEvent для определения координат изображения и выводи в лог координаты. Попробуй, должно сработать.
R.id.team
Политика на форуме запрещена

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 9. Обработчики событий на примере Button.

Сообщение math64 » 07 авг 2012, 18:29

Делай изображение с прозрачным фоном.
Если не кликается на прозрачную часть - всё ОК.
Если кликается - лови onTouchEvent (в производном классе или слушателем). А там
imageView.getDrawable().getTransparentRegion().contains(x, y) - проверяй, тапаешь ли в прозрачный регион.

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Урок 9. Обработчики событий на примере Button.

Сообщение andev » 08 авг 2012, 08:33

Milker, дайте скрины как оно примерно должно выглядеть и примерное описание что к чему. Подозреваю, что вам необходимо делать совсем иначе.
Кстати, вы там выше писали, что у вас в активити реализуется один интерфейс, нет никаких проблем реализовать несколько

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

public class MainActivity extends Activity implements OnClickListener, OnTouchListener

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Урок 9. Обработчики событий на примере Button.

Сообщение andev » 08 авг 2012, 08:36

krjakov, абсолютно неверно, я так понимаю logo.xml это у вас активити-заставка, ее надо реализовать иначе, например, так:

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

package somepackage.activity;

import mobi.krona.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class ActivitySplash extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_splash);
		
		Thread splashThread = new Thread() { 
			@Override 
			public void run() { 
				try {
					sleep(500); // задержка
				} catch (InterruptedException e) { 
	                // do nothing 
	            } finally { 
	            	finish(); 
	                Intent i = new Intent();
	                i.setClassName("somepackage", "somepackage.activity.ActivityEnter"); // следующая активити, в вашем случае MAIN.xml
	                startActivity(i); 
	            } 
	        } 
		}; 
		splashThread.start();
	}
}

Блокируя кнопки Ифсл и Home вы нарушаете гайдлайны гугла, вводите пользователя в заблуждение и вообще сеете хаос :)

le}{a52rus
Сообщения: 9
Зарегистрирован: 04 сен 2012, 21:35

Re: Урок 9. Обработчики событий на примере Button.

Сообщение le}{a52rus » 16 сен 2012, 18:30

Ребят! Прошу прощения за дилетантский вопрос!
Но я что то никак не могу определится с кнопкой Cancel
с ОК все более менее понятно! т.к. имеется готовый образец кода,а вот куда дальше вписывать обработчик Cancel ?,я что то разобратся не смог(((
Не составит у вас труда ткнуть меня носом в правильном направлении)))
Спасибо.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 9. Обработчики событий на примере Button.

Сообщение rezak90 » 16 сен 2012, 19:15

le}{a52rus писал(а):Ребят! Прошу прощения за дилетантский вопрос!
Но я что то никак не могу определится с кнопкой Cancel
с ОК все более менее понятно! т.к. имеется готовый образец кода,а вот куда дальше вписывать обработчик Cancel ?,я что то разобратся не смог(((
Не составит у вас труда ткнуть меня носом в правильном направлении)))
Спасибо.
кнопку Cancel делайте аналогично кнопке ОК. Так же создавайте обработчик и передавайте его методу setOnClickListener.
R.id.team
Политика на форуме запрещена

le}{a52rus
Сообщения: 9
Зарегистрирован: 04 сен 2012, 21:35

Re: Урок 9. Обработчики событий на примере Button.

Сообщение le}{a52rus » 16 сен 2012, 19:23

rezak90,я дико извиняюсь,не смогли бы вы продолжить код?... 2 дня я его уже "Пилю" что то в лужу сел(((

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

package com.example.onclickbuttons;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
 
   TextView tvOut;
   Button btnOk;
   Button btnCancel;
 
   /** Called when the activity is first created. */
   
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
 
     // найдем View-элементы
     tvOut = (TextView) findViewById(R.id.tvOut);
     btnOk = (Button) findViewById(R.id.btnOk);
     btnCancel = (Button) findViewById(R.id.btnCancel);
 
     // создаем обработчик нажатия
      OnClickListener oclBtnOk = new OnClickListener() {
       
       public void onClick(View v) {
         // Меняем текст в TextView (tvOut)
         tvOut.setText("Нажата кнопка ОК");
       }
      };
   
     // присвоим обработчик кнопке OK (btnOk)
     btnOk.setOnClickListener(oclBtnOk);
  
 

   }
};

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 9. Обработчики событий на примере Button.

Сообщение rezak90 » 16 сен 2012, 19:32

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

btnCancel = (Button) findViewById(R.id.btnCancel);
     // создаем обработчик нажатия
      OnClickListener oclBtnCancel = new OnClickListener() {
       public void onClick(View v) {
         // Меняем текст в TextView (tvOut)
         tvOut.setText("Нажата кнопка Cancel");
       }
      };
     // присвоим обработчик кнопке Cancel (btnCancel)
     btnOk.setOnClickListener(oclBtnCancel );
R.id.team
Политика на форуме запрещена

le}{a52rus
Сообщения: 9
Зарегистрирован: 04 сен 2012, 21:35

Re: Урок 9. Обработчики событий на примере Button.

Сообщение le}{a52rus » 16 сен 2012, 19:52

Выдаёт ошибку...

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

package com.example.onclickbuttons;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
 
   TextView tvOut;
   Button btnOk;
   Button btnCancel;
 
   /** Called when the activity is first created. */
   
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
 
     // найдем View-элементы
     tvOut = (TextView) findViewById(R.id.tvOut);
     btnOk = (Button) findViewById(R.id.btnOk);
     btnCancel = (Button) findViewById(R.id.btnCancel);
 
     // создаем обработчик нажатия
      OnClickListener oclBtnOk = new OnClickListener() {
       
       public void onClick(View v) {
         // Меняем текст в TextView (tvOut)
         tvOut.setText("Нажата кнопка ОК");
       }
      };
   
     // присвоим обработчик кнопке OK (btnOk)
     btnOk.setOnClickListener(oclBtnOk);
  
   }
};// сдесь ошибка Sintax error "}""{" expected
btnCancel = (Button) findViewById(R.id.btnCancel);

// создаем обработчик нажатия

 OnClickListener oclBtnCancel = new OnClickListener() {

 public void onClick(View v) {

 // Меняем текст в TextView (tvOut)

 tvOut.setText("Нажата кнопка Cancel");
 }


 };
// присвоим обработчик кнопке Cancel (btnCancel)

btnOk.setOnClickListener(oclBtnCancel )//  и сдесь ошибка тоже Sintax error


ЗАпарился я что то... Да так что туплю конкретно.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 9. Обработчики событий на примере Button.

Сообщение rezak90 » 16 сен 2012, 19:55

ну вы хотя бы вниклись в мой копи-паст код =)
btnOk.setOnClickListener(oclBtnCancel );
поменять на
btnCancel.setOnClickListener(oclBtnCancel );
R.id.team
Политика на форуме запрещена

le}{a52rus
Сообщения: 9
Зарегистрирован: 04 сен 2012, 21:35

Re: Урок 9. Обработчики событий на примере Button.

Сообщение le}{a52rus » 16 сен 2012, 21:07

Дружище! а как тогда будет реализовываться кнопка ок? :-)
я так то понял это еще по урокам, что нужно btnOk.setOnClickListener заменить btnCancel...
но тогда обработчика для батнОк не будет!? получается что будет работать только кнопка батнКанцел??
–---------
ребят извините я только начинаю! Это мой первый опыт коддинга, если не считать HTML... но это разные вещи...

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 9. Обработчики событий на примере Button.

Сообщение rezak90 » 16 сен 2012, 21:19

просто создаёте два разных обработчика, один для кнопки ОК, другой для Cancel.
R.id.team
Политика на форуме запрещена

le}{a52rus
Сообщения: 9
Зарегистрирован: 04 сен 2012, 21:35

Re: Урок 9. Обработчики событий на примере Button.

Сообщение le}{a52rus » 16 сен 2012, 22:23

rezak90, попробую завтра, но я просто не пойму куда их вставлять?
эти оба обработчика можно рядом друг с другом ставить?
или же сперва идет один обработчик с его атрибутами а потом уже другой?.... я не смог разобраться в порядке расположения!...
завтра попробую, сейчас нет возможности, комп на работе оставил...
Спасибо!

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 9. Обработчики событий на примере Button.

Сообщение rezak90 » 16 сен 2012, 22:54

le}{a52rus вам лучше прочитать хотя бы одну книгу по Java если возникают такие вопросы как "порядок расположения" (и даже не обязательно по Jav'e), потому что такого понятия нету. Здесь нужно понять логику кода. Обработчик можно определить в одном месте, а присвоить его кнопке в другом и т.д.
R.id.team
Политика на форуме запрещена

le}{a52rus
Сообщения: 9
Зарегистрирован: 04 сен 2012, 21:35

Re: Урок 9. Обработчики событий на примере Button.

Сообщение le}{a52rus » 16 сен 2012, 23:13

rezak90
Спасибо большое за внимание и терпение к таким глупым вопросам с моей стороны:-)
буду пробовать, изучать!
Ковчег тоже не профессионал строил! :-)
Что не скажешь про Титаник...
Вы уже мне во многом приоткрыли глаза! :-)

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 9. Обработчики событий на примере Button.

Сообщение math64 » 17 сен 2012, 07:36

le}{a52rus: Обращайте внимание на соответствие фигурных скобок
Код вставлен за пределами класса, а нужно во внутрь метода onCreate();

le}{a52rus
Сообщения: 9
Зарегистрирован: 04 сен 2012, 21:35

Re: Урок 9. Обработчики событий на примере Button.

Сообщение le}{a52rus » 17 сен 2012, 16:52

Друзья!,спасибо! Разобрался скомпилил запустил,код работает!! :-)
Всё дело в том что я обработчик создавал в обработчике :-) Естественно он не мог понять что я от него хочу "math64" отчасти был прав! И только после того как я пару раз сегодня перебил этот код то понял где совершаю ошибку!
Спасибо ребят!.
Как говорится! Повторение мать ученья :-)
Приступаю к следующему уроку!

Quver
Сообщения: 9
Зарегистрирован: 18 сен 2012, 00:37

зачем два OnClickListener

Сообщение Quver » 18 сен 2012, 22:36

в джава знаю есть
if (event.getSource() == item1)

как в андройде сделать проверку..какая кнопка была нажата ?

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: зачем два OnClickListener

Сообщение AndreyI » 18 сен 2012, 22:49

Quver писал(а):в джава знаю есть
if (event.getSource() == item1)

как в андройде сделать проверку..какая кнопка была нажата ?
В обработчик нажатия передается объект View из которого можно, к примеру, взять ID нажатой кнопки.

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

public void onClickStart(View v) {
if (v.getId()==R.id.item1)...
}

Ответить