Урок 102. Touch – обработка касания

Обсуждение уроков
razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Re: Урок 102. Touch – обработка касания

Сообщение razmus » 26 июн 2013, 14:33

По пробовал сделать реализацию жеста и в следствии переход к другому активити, только вот почему то жеста не ждет и переходит сразу при запуске приложения.
XML стандартный Hello world!

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

package com.example.touch;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;

public class MainActivity extends Activity implements OnTouchListener {
  
  LinearLayout tv;
  float x;
  float y;
  String sDown;
  String sMove;
  String sUp;
  
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        tv = new LinearLayout(this);
        tv.setOnTouchListener(this);
        setContentView(R.layout.activity_main);
    }

  @Override
  public boolean onTouch(View v, MotionEvent event) {
    x = event.getX();
    y = event.getY();
    float xx = 0, xxx = 0;
    
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN: // нажатие
      sDown = "Down: " + x + "," + y;
      sMove = ""; sUp = "";
      xx = x;
      break;
    case MotionEvent.ACTION_MOVE: // движение
      sMove = "Move: " + x + "," + y;
      break;
    case MotionEvent.ACTION_UP: // отпускание
    case MotionEvent.ACTION_CANCEL:  
      sMove = "";
      sUp = "Up: " + x + "," + y;
      xxx = x;
      break;
    }
    if (xx + 100 < xxx) {startActivity(new Intent(this, test.class));}
    return true;
  }
}
З.Ы.
Добавил файл проекта
Вложения
touch.rar
(1.14 МБ) 255 скачиваний

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 102. Touch – обработка касания

Сообщение Foenix » 26 июн 2013, 17:52

да убери для теста вообще появление второго активити, обработай жест вначале, например, выводи тост какой-нибудь с координатами или который фиксирует движение
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 102. Touch – обработка касания

Сообщение Foenix » 26 июн 2013, 17:57

Кроме того, в обработке жестов должна фигурировать скорость "проводки", чтоб исключить случайное касание.

Вот пример обработки справа-налево
http://stackoverflow.com/questions/4139 ... e-gestures

Но все равно рекомендую вначале просто тостики наделать, т.к. нужно настроить это дело под собственные потребности. На моем устройстве, например, как-то дохло было с жестами - никак не хотел срабатывать.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

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

Re: Урок 102. Touch – обработка касания

Сообщение rezak90 » 26 июн 2013, 18:43

razmus
что за жест пытаешься реализовать? для жестов нужно использовать gesture
R.id.team
Политика на форуме запрещена

razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Re: Урок 102. Touch – обработка касания

Сообщение razmus » 26 июн 2013, 19:16

rezak90 писал(а):razmus
что за жест пытаешься реализовать? для жестов нужно использовать gesture
Пытаюсь реализовать, переход от одного Activity к другому, если использовать пример из урока то все переходит замечательно. Но у меня ListView где уже используется onClick, пробовал ViewFlipper, но научить его переходить по Activity не получилось. Я изначально предполагал, что переход по Touch это как надстройка над layout, которая ловит жести, как на мобильниках, отдельно экран, отдельно тач, но получилась печаль) Можно ли как-то выкрутится без создания layout программно?

Заранее благодарен!

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

Re: Урок 102. Touch – обработка касания

Сообщение rezak90 » 26 июн 2013, 19:55

я правильно понял, тебе нужно кликнуть по элементу списка и перейти на новое активити?
R.id.team
Политика на форуме запрещена

razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Re: Урок 102. Touch – обработка касания

Сообщение razmus » 27 июн 2013, 07:53

rezak90 писал(а):я правильно понял, тебе нужно кликнуть по элементу списка и перейти на новое активити?
Ну не совсем кликнуть, по клику на списке открывается содержимое элемента списка, пытаю сделать, что список был "слушателем" и сначала слушал "жест" с условием типа if(xx + 100 < xxx) {startActivity(new Intent(this, test.class)), а если жеста не произошло обрабатывал метод OnClick. Пробовал сделать их вложенными по принцип "если то", но пять никакого эффекта.

razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Re: Урок 102. Touch – обработка касания

Сообщение razmus » 27 июн 2013, 07:55

rezak90 писал(а):я правильно понял, тебе нужно кликнуть по элементу списка и перейти на новое активити?
Ну не совсем кликнуть, по клику на списке открывается содержимое элемента списка, пытаю сделать, что список был "слушателем" и сначала слушал "жест" с условием типа if(xx + 100 < xxx) {startActivity(new Intent(this, test.class)), а если жеста не произошло обрабатывал метод OnClick. Пробовал сделать их вложенными по принцип "если то", но пять никакого эффекта.
Foenix писал(а):Кроме того, в обработке жестов должна фигурировать скорость "проводки", чтоб исключить случайное касание.

Вот пример обработки справа-налево
http://stackoverflow.com/questions/4139 ... e-gestures

Но все равно рекомендую вначале просто тостики наделать, т.к. нужно настроить это дело под собственные потребности. На моем устройстве, например, как-то дохло было с жестами - никак не хотел срабатывать.
Спасибо большое, попробую.

SmartDragon
Сообщения: 1
Зарегистрирован: 21 июл 2013, 16:55

Re: Урок 102. Touch – обработка касания

Сообщение SmartDragon » 04 сен 2013, 13:08

Здравствуйте!

Реализовать хотелось следующее: если пользователь не сдвинул палец больше чем на, грубо говоря, 5 единиц то вызывается контекстное меню, иначе контекстное меню не вызывается а делается определенное действо (это уже другая история). Речь идет о ListView.

Прочитал всю тему понял про возвращение true и false, чтобы передавать эстафету другим обработчикам, но никак не могу победить OnTouch совместно с registerForContextMenu.

При ACTION_DOWN если верну false, то сработает и вызов контекстного меню и если я дальше буду двигать палец ACTION_MOVE и ACTION_UP.
Если же верну true, то даже если я в ACTION_MOVE верну false длительное нажатие не вызовет контекстного меню.

Подскажите может кто сталкивался данной проблемой?

SPAWN
Сообщения: 20
Зарегистрирован: 11 мар 2013, 21:59

Re: Урок 102. Touch – обработка касания

Сообщение SPAWN » 03 окт 2013, 12:38

Добрый день! Реализовываю кастомную кнопку по которой пользователь должен перемещать палец по кругу либо по часовой либо против часовой стрелки. Подскажите, как узнать направление движения?

just4fun13
Сообщения: 3
Зарегистрирован: 13 окт 2013, 18:00

Re: Урок 102. Touch – обработка касания

Сообщение just4fun13 » 13 окт 2013, 18:13

Всем доброго времени суток, мучаюсь с реализацией обработки касания. Хочу чтобы их ловил мой xml слой RelativeLayer, перепробовал всякие мутные и не очень схемы, но работать оно все равно не хочет. :(

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

package com.example.trytostart;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View.OnTouchListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.view.View;

public class MainActivity extends Activity implements OnTouchListener{
	TextView tv;
		float x,y;
	String sDown,sMove,sUp;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	       super.onCreate(savedInstanceState);
    tv = (TextView) findViewById(R.id.textview);
   // LayoutInflater inflater= (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  //  View vi = inflater.inflate(R.layout.activity_main, null);
    	      setContentView(R.layout.activity_main);
    	 RelativeLayout viv = (RelativeLayout) findViewById( R.id.myView);    
    	      viv.setOnTouchListener(this);
    	     //   tv.setOnTouchListener(this);
    	//           setContentView(tv);
    }


    @Override
    public boolean onTouch(View v, MotionEvent Event){
    	x = Event.getX();
    	y = Event.getY();
    	
    	switch (Event.getAction())
    	{
    	case MotionEvent.ACTION_DOWN:
    		sDown = "Down" + x + "," + y;
    		sMove = " "; sUp = "";
    		break;
    	case MotionEvent.ACTION_MOVE:
    		sMove = "Move" + x + "," + y;
    		break;
    	case MotionEvent.ACTION_UP:
    	case MotionEvent.ACTION_CANCEL:
    		sMove = ""; 
    		sUp = "Up" + x + "," + y;
    		break;
    	}
    	tv.setText(sDown + "\n" + sMove + "\n" + sUp);
    	return true;
    }
}
На activity_main у меня только TextView и RelativeLayout(id = "myView"). Компилирует нормально, но при запуске и "тычке" по экрану отваливается. В чем моя ошибка, подскажите пожалуйста, уважаемые форумчане.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 102. Touch – обработка касания

Сообщение Foenix » 13 окт 2013, 20:14

"отваливается" - давайте лог, весь, все красное сюда копировать надо.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

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

Re: Урок 102. Touch – обработка касания

Сообщение trew » 13 окт 2013, 20:30

Из урока:
tv = new TextView(this);
tv.setOnTouchListener(this);
setContentView(tv);

Не понятна последняя строка, обычно пишем там файл лейаута
setContentView(R.layout.main);

Просьба объяснить логику работы, что за TextView в setContentView(tv) ?
И откуда проект знает, что нужно открыть R.layout.main ? (в коде ведь этого нет)
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

just4fun13
Сообщения: 3
Зарегистрирован: 13 окт 2013, 18:00

Re: Урок 102. Touch – обработка касания

Сообщение just4fun13 » 14 окт 2013, 03:02

Спасибо за столь быстрый отклик! Итак, я хотел повторить предложенный в уроке пример, с одним лишь исключением - обрабатывать касание нарисованного мною слоя в activity_main.xml. Для этого на по умолчанию созданный RelativeLayout я налепил элемент TextView, чтобы он выводил мне координаты точки. Я в main файле создаю две локальных переменных RelativeLayout и TextView, к которым подвязываю объекты из моего интерфейса по id. И извините, везде где в начале стоит "//" код не используется ( это мои предыдущие попытки ). Content прогружаю из файла activity_main.

Лог файл:

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

10-13 19:56:57.012: E/InputEventReceiver(2093): Exception dispatching input event.
10-13 19:56:57.100: E/MessageQueue-JNI(2093): Exception in MessageQueue callback: handleReceiveCallback
10-13 19:56:57.320: E/MessageQueue-JNI(2093): java.lang.NullPointerException
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at com.example.trytostart.MainActivity.onTouch(MainActivity.java:52)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.View.dispatchTouchEvent(View.java:7379)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2203)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1938)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1966)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1418)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.app.Activity.dispatchTouchEvent(Activity.java:2424)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1914)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.View.dispatchPointerEvent(View.java:7564)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3883)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3778)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5419)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5399)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5370)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5493)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:182)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.os.MessageQueue.nativePollOnce(Native Method)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.os.MessageQueue.next(MessageQueue.java:132)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.os.Looper.loop(Looper.java:124)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at android.app.ActivityThread.main(ActivityThread.java:5103)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at java.lang.reflect.Method.invokeNative(Native Method)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at java.lang.reflect.Method.invoke(Method.java:525)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-13 19:56:57.320: E/MessageQueue-JNI(2093): 	at dalvik.system.NativeStart.main(Native Method)
10-13 19:56:57.401: D/AndroidRuntime(2093): Shutting down VM
10-13 19:56:57.441: W/dalvikvm(2093): threadid=1: thread exiting with uncaught exception (group=0x414c4700)
10-13 19:56:57.630: E/AndroidRuntime(2093): FATAL EXCEPTION: main
10-13 19:56:57.630: E/AndroidRuntime(2093): java.lang.NullPointerException
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at com.example.trytostart.MainActivity.onTouch(MainActivity.java:52)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.View.dispatchTouchEvent(View.java:7379)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2203)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1938)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1910)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1966)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1418)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.app.Activity.dispatchTouchEvent(Activity.java:2424)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1914)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.View.dispatchPointerEvent(View.java:7564)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3883)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3778)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5419)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5399)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5370)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5493)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:182)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.os.MessageQueue.nativePollOnce(Native Method)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.os.MessageQueue.next(MessageQueue.java:132)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.os.Looper.loop(Looper.java:124)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at android.app.ActivityThread.main(ActivityThread.java:5103)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at java.lang.reflect.Method.invokeNative(Native Method)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at java.lang.reflect.Method.invoke(Method.java:525)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-13 19:56:57.630: E/AndroidRuntime(2093): 	at dalvik.system.NativeStart.main(Native Method)
10-13 19:58:49.770: I/Process(2093): Sending signal. PID: 2093 SIG: 9

В процессе отладки обнаружил, что проблему вызывал конкретный TextView, то есть он не хочет выводить на него ничего, используя тостер реализовалось все нормально. Однако вопрос остался открытым, что если я хочу передать текст на frame, как мне лучше сделать это, какой объект использовать. Подскажите пожалуйста, уважаемые форумчане :roll:

код последней рабочей редакции ( с тостером )

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

package com.example.trytostart;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View.OnTouchListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;

public class MainActivity extends Activity implements OnTouchListener{
	TextView tv;
		float x,y;
	String sDown,sMove,sUp;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	       super.onCreate(savedInstanceState);
    	      setContentView(R.layout.activity_main);
    	 RelativeLayout viv = (RelativeLayout) findViewById( R.id.myView);    
    	      viv.setOnTouchListener(this);
    }


    @Override
    public boolean onTouch(View v, MotionEvent Event){
    	x = Event.getX();
    	y = Event.getY();
    	
    	switch (Event.getAction())
    	{
    	case MotionEvent.ACTION_DOWN:
    		sDown = "Down" + x + "," + y;
    		sMove = " "; sUp = "";
    		break;
    	case MotionEvent.ACTION_MOVE:
    		sMove = "Move" + x + "," + y;
    		break;
    	case MotionEvent.ACTION_UP:
    	case MotionEvent.ACTION_CANCEL:
    		sMove = ""; 
    		sUp = "Up" + x + "," + y;
    		break;
    	}
   	Context context = getApplicationContext();
	Toast toast = Toast.makeText(context, sDown + "\n" + sMove + "\n" + sUp, Toast.LENGTH_SHORT);
   toast.show();
    	return false;
    }
}

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

Re: Урок 102. Touch – обработка касания

Сообщение trew » 14 окт 2013, 16:00

trew писал(а):Из урока:
tv = new TextView(this);
tv.setOnTouchListener(this);
setContentView(tv);

Не понятна последняя строка, обычно пишем там файл лейаута
setContentView(R.layout.main);

Просьба объяснить логику работы, что за TextView в setContentView(tv) ?
И откуда проект знает, что нужно открыть R.layout.main ? (в коде ведь этого нет)
up
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 102. Touch – обработка касания

Сообщение Foenix » 14 окт 2013, 17:13

в уроке написано
strings.xml и main.xml нам не понадобятся, их не трогаем.
Таким образом, вью активити создается динамически, сразу, там только текствью задействованы, которые таким образом создаются и отображаются на экране.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

just4fun13
Сообщения: 3
Зарегистрирован: 13 окт 2013, 18:00

Re: Урок 102. Touch – обработка касания

Сообщение just4fun13 » 14 окт 2013, 17:35

Спасибо за разъяснение, но я понял урок и пример в нем разобранный. Но что, если я хочу повторить этот пример используя прописанный собственоручно контект (R.layout.main), это же наверное как то тоже можно реализовать. В этом и заключается мой вопрос - как реализовать такой же пример, но используя добавленный к своему layout-у textview ( или что то другое выводящее текст).

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

Re: Урок 102. Touch – обработка касания

Сообщение trew » 14 окт 2013, 17:38

Т.е. если нет строки setContentView(R.layout.main);
значит xml-макет (лейаут) создается динамически. А имени его мы не знаем.
И хотим в него добавить TextView элемент.
Это можно сделать вот так: setContentView(tv);
Начинаю понимать.
А если нужно добавить TextView на R.layout.main - смотрим урок 16.

Если всё написаное мной верно, тогда я разобрался.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 102. Touch – обработка касания

Сообщение Foenix » 14 окт 2013, 17:51

Строго говоря R.layout.main тоже создается динамически, это даже не имя, а целое число такое (адрес).
А у вьюшек есть айди, т.е. может назначаться. И динамически созданному текствью его можно назначить.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

SPAWN
Сообщения: 20
Зарегистрирован: 11 мар 2013, 21:59

Re: Урок 102. Touch – обработка касания

Сообщение SPAWN » 15 окт 2013, 13:25

Народ помогите. У меня есть кнопка с обработчиком клика, которая лежит на кастомной вьюхе со своим тач обработчиком. Вопрос как сделать так чтоб если мув начинается с области кнопки он работал, а так получается только клик

Ответить