Wątek zablokowany 2012-02-20 15:14 przez Marooned.

Android problem z onTouchEvent

0

Mam problem z androidem a konkretnie z tym eventem.

Uzywam go w surfaceView. nie wiem dlaczego event OnTouchEvent jest wywolywany tylko przy pierwszym nacisnieciu wyswietlacza, a pozniej juz nie, ile bym nie klikał.

 

package org.pollub.pilka;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.provider.CalendarContract.Colors;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class WidokGry extends SurfaceView implements SurfaceHolder.Callback
{
    private LogikaGry logikaGry;

    private WątekGry thread;

    private Gra graActivity;
    private int xOfTouch;



    public boolean isGameFailed()
    {
	boolean result = this.logikaGry.czyGraJestPrzegrana();
	return result;
    }



    public WidokGry(Context context)
    {
	super(context);
	getHolder().addCallback(this);
	setFocusable(true);
	this.graActivity = (Gra) context;
	this.onInit();
	thread = new WątekGry(getHolder(), this);
    }



    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
    {
    }



    @Override
    public void surfaceCreated(SurfaceHolder holder)
    {
	thread.setRunning(true);
	thread.start();
    }



    @Override
    public void surfaceDestroyed(SurfaceHolder holder)
    {
	boolean retry = true;
	while (retry)
	{
	    try
	    {
		thread.join();
		retry = false;
	    } catch (InterruptedException e)
	    {
	    }
	}
    }



    @Override
    public boolean onTouchEvent(MotionEvent event)
    {

	xOfTouch = (int) event.getX();
	try
	{
	    Thread.sleep(3);
	} catch (InterruptedException e)
	{
	}
	return super.onTouchEvent(event);
    }



    public boolean onKeyEvent(KeyEvent event)
    {
	return true;
    }



    @Override
    protected void onDraw(Canvas canvas)
    {
	logikaGry.Draw(canvas);
    }



    public void onUpdate(int timeGone)
    {
	this.logikaGry.setPositionOfPaletka(xOfTouch);
	this.logikaGry.Update(timeGone);
    }
    
    public void SetPositionOfPaletka(int position)
    {
	this.logikaGry.setPositionOfPaletka(position);
    }



    protected void onInit()
    {
	logikaGry = new LogikaGry(300, 350, 30, 20);
    }



    public void goBackToMain()
    {
	this.graActivity.goBackToMain();
    }
}

tak wyglada kod. zwrocenie true w onTouchEvent wcale nie pomaga.

1
    @Override
    public void surfaceDestroyed(SurfaceHolder holder)
    {
        boolean retry = true;
        while (retry)
        {
            try
            {
                thread.join();
                retry = false;
            } catch (InterruptedException e)
            {
            }
        }
    }
    public boolean onTouchEvent(MotionEvent event)
    {
 
        xOfTouch = (int) event.getX();
        try
        {
            Thread.sleep(3);
        } catch (InterruptedException e)
        {
        }
        return super.onTouchEvent(event);
    }

Jak patrzę na taki kod... to się nie dziwię, że są w Polsce ludzie, którzy nawet zastrzelić się nie potrafią.

w skrócie nie działa Ci bo:
1. nie czytasz dokumentacji
2. robisz głupie rzeczy

0

dzieks. zazwyczaj jak cos koduje to uzywam do tego normalnych narzedzi np platformy net. ze smiesznym androidem mialem pierwszy i jak mam nadzieje ostatni kontakt. musialem napisac jedna mala aplikacje i nie mialem czasu na przedzieranie sie przez tomy zbednej dokumentacji zeby znalezc to jedno jedyne zdanie ktore mnie wyprowadzi z błędu. poza tym przywyklem do narzedzi ktore sa przejrzyste i jak funkcja nazywa sie "A" to robi "A" a nie "B". przepraszam.

a problem i tak tkwil w czym innym. wiesz co? to juz na php.pl czasem wiecej potrafia pomoc. bez zbednego [CIACH!] jaki to ktos kto zadaje pytanie jest głupi.

1
Orzeszekk napisał(a)

dzieks. zazwyczaj jak cos koduje to uzywam do tego normalnych narzedzi np platformy net.

współczuję :)

Orzeszekk napisał(a)

(...) nie mialem czasu na przedzieranie sie przez tomy zbednej dokumentacji zeby znalezc to jedno jedyne zdanie (...)

Życzę Cie powodzenia na zmywaku i wnioskuję o bana dla ciebie tutaj.

Orzeszekk napisał(a)

poza tym przywyklem do narzedzi ktore sa przejrzyste i jak funkcja nazywa sie "A" to robi "A" a nie "B". przepraszam.

Sądzisz? bo ja jakoś takich rozbieżności nie widzę... za to Twój kod (SetPositionOfPaletka, wtf?) wygląda jak pisany przez humanistę... Zapewne chciałbyś zrobić jedno, ale żeby było romantyczniej napisałeś coś innego... Humaniści nie powinni pisać w językach programowania dla normalnych ludzi, wracaj sobie do tego swojego .neta, niech tam się z tobą użerają, będą mieli trochę śmiechu :)

Orzeszekk napisał(a)

a problem i tak tkwil w czym innym.
PEBKAC

Orzeszekk napisał(a)

wiesz co? to juz na php.pl czasem wiecej potrafia pomoc. bez zbednego pierdolenia jaki to ktos kto zadaje pytanie jest głupi.

Jak na php.pl widzą głupka, to myślą "swój", co się dziwisz ;)

0

jak przestaniesz kodzić te swoje

małe projekty na zlecenie

i zajmiesz sie czymś pożytecznym to szybko odkryjesz że nie będziesz miał czasu odkrywać wszystkiego samemu, a najszybciej jest sie zapytac kogos kto to juz przerabiał. a na razie żyj sobie w swoim światku cpp scali, korków i myśl że jesteś super.

Nie wiem co jest złego w SetPositionOfPaletka, rozumiem że ty byś napisał set_c zeby "zoptymalizowac" kod aby zajmowal jak najmniej miejsca, a w komentarzu na górze dopisał komentarz //ustawia pozycje paletki ? :) no tak, pewnie szybciej sie wtedy wykona
Jak tak to właśnie pojechałes samemu sobie.

a zeby bylo smieszniej, taka konwencje nazewnictwa C# i javy znalazlem kiedys w mądrym artykule na waszym forum.

2

W jakim artykule widziałeś sugestię by mieszać w nazwach słowa polskie i angielskie?

0

nie mam zbytnio czasu na szukanie ale bylo cos w ten desen:

"nazwy metod zwracajacych i ustawiajacych wlasciwosci klasy poprzedzamy słówkami get i set, oraz jesli wlasciwosc jest logiczna, zamiast get uzywamy is.
Ponieważ nie istnieją dla nich zbyt eleganckie odpowiedniki w języku Polskim, a wiele narzedzi opiera swoje dzialanie na zastosowaniu tej konwencji, sensownym wydaje sie uzywanie slowek get, set i is w kombinacji z polskimi nazwami"

jesli chodzi ci o positionOfPaletka to faktycznie wmieszalo sie polskie z angielskim - position jest podobne do pozycja. pisalem w duzym pospiechu, mialem jeden dzien na napisanie tej aplikacji, a nic nie pisalem wczesniej na androida, z javy rzadko korzystam bo jesli mam mozliwosc wyboru wybieram C#. jak pisze cos w czym nikt poza mną nie bedzie grzebał to dla zaoszczedzenia czasu i lepszej czytelnosci pisze po polsku, nieuniknione ze polskie slowa mieszaja sie z angielskimi, przeciez skladnia języka jest po angielsku i czasem wychodza takie smieszne rzeczy.

problem byl z strasznie dziwnym jak dla mnie dzialaniem mechanizmu intencji (Intent) - uzycie go w zwyklym przycisku do przejscia na kolejną "podstronę" Activity, zawierajaca gre, powodowalo wykonanie sie tej activity, a po sekundzie... wykonywala sie ona jeszcze raz (drugie onCreate). Skutkiem czego pierwszy, prawidlowy surfaceView tracil focus, a przejmowal go drugi, nieprawidłowy który w ogole nie powinien sie pojawic. Do teraz sie zastanawiam jakim cudem to sie dzieje, nigdzie w dokumentacji zadnej z klas z android api których uzylem nie znalazlem wzmianki ze tak powinno to dzialac no ale cóż.. flaga costam_on_top pomogła.

no ale musze tutaj bić pokłony "koledze" z góry który "bardzo" pomógł w rozwiązaniu problemu. Przerzuc sie kolego na assemblera, tylko tam bedziesz mogl pokazac jak bardzo jestes lepszy od innych. jesli uwazasz ze .net jest gówniany, to sciagnij sobie triala VS, sciagnij sobie windows phone 7 sdk z emulatorem, i sprobuj cos napisac, a pozniej sciagnij sobie eclipsa, android sdk, emulator i obserwuj jak zwieksza sie ilosc wtf/minute. Sorry bardzo ale to nie ja musze kupowac sobie telefon z andkiem zeby napisac cos dzialajacego, bo kazda aplikacja ktora zadziala na emulatorze wp7 zadziala na prawdziwym telefonie.

poza tym to nie VS sypie wyjątkami jak z rękawa podczas normalnego dzialania tylko wlasnie eclipse/netbeans wiec wyglada mi to na hejt w stylu: Microsoft - gówniane. Masz windowsa czy pisales tego posta z linuxa?

1

Skończ, waść już te dywagacje, bo ni chója w rację się nie wcelowujesz, a i bez tego wartość merytoryczna twego posta to zero.

Orzeszekk napisał(a)

ty byś napisał set_c zeby "zoptymalizowac"(...)Jak tak to właśnie pojechałes samemu sobie.

Skąd ten pomysł? Nie jesteś na php.pl, zachowuj się normalnie albo spieprzaj.

Orzeszekk napisał(a)

Przerzuc sie kolego na assemblera, tylko tam bedziesz mogl pokazac jak bardzo jestes lepszy od innych.
Nie chciałeś przypadkiem powiedzieć "asm"? A, no nie chciałeś, bo nawet co to jest nie wiesz...

Orzeszekk napisał(a)

jesli uwazasz ze .net jest gówniany, to sciagnij sobie triala VS, sciagnij sobie windows phone 7 sdk z emulatorem, i sprobuj cos napisac, a pozniej sciagnij sobie eclipsa, android sdk, emulator i obserwuj jak zwieksza sie ilosc wtf/minute.

Jedyne wtf związane z javą i andkiem widzę na forach, w postach pisanych przez nieudaczników.

Orzeszekk napisał(a)

Sorry bardzo ale to nie ja musze kupowac sobie telefon z andkiem zeby napisac cos dzialajacego, bo kazda aplikacja ktora zadziala na emulatorze wp7 zadziala na prawdziwym telefonie.

Nie mam telefonu z andkiem, devię na emu; tak bardzo przegrałeś.

Orzeszekk napisał(a)

poza tym to nie VS sypie wyjątkami jak z rękawa podczas normalnego dzialania tylko wlasnie eclipse/netbeans wiec wyglada mi to na hejt w stylu: Microsoft - gówniane.

Mi nic nie sypie, a tego hejta to skąd wziąłeś?

ps.

Jednego dnia siadłem do androidowego API i w ciągu kilku godzin napisałem gierkę, która działała jak trzeba - nikogo o nic nie musiałem pytać, ton dokumentacji też nie wertowałem, dev guide przeczytałem aby i przejrzałem dema, testowałem na androidzie x86. Apk działał na telefonie tak samo.

Życie jest proste, gdy się nie jest idiotą. Polecam.

0
Kerai napisał(a)

Skończ, waść już te dywagacje, bo ni chója w rację się nie wcelowujesz, a i bez tego wartość merytoryczna twego posta to zero.

Orzeszekk napisał(a)

ty byś napisał set_c zeby "zoptymalizowac"(...)Jak tak to właśnie pojechałes samemu sobie.

Skąd ten pomysł? Nie jesteś na php.pl, zachowuj się normalnie albo spieprzaj.

Orzeszekk napisał(a)

Przerzuc sie kolego na assemblera, tylko tam bedziesz mogl pokazac jak bardzo jestes lepszy od innych.
Nie chciałeś przypadkiem powiedzieć "asm"? A, no nie chciałeś, bo nawet co to jest nie wiesz...

Orzeszekk napisał(a)

jesli uwazasz ze .net jest gówniany, to sciagnij sobie triala VS, sciagnij sobie windows phone 7 sdk z emulatorem, i sprobuj cos napisac, a pozniej sciagnij sobie eclipsa, android sdk, emulator i obserwuj jak zwieksza sie ilosc wtf/minute.

Jedyne wtf związane z javą i andkiem widzę na forach, w postach pisanych przez nieudaczników.

Orzeszekk napisał(a)

Sorry bardzo ale to nie ja musze kupowac sobie telefon z andkiem zeby napisac cos dzialajacego, bo kazda aplikacja ktora zadziala na emulatorze wp7 zadziala na prawdziwym telefonie.

Nie mam telefonu z andkiem, devię na emu; tak bardzo przegrałeś.

Orzeszekk napisał(a)

poza tym to nie VS sypie wyjątkami jak z rękawa podczas normalnego dzialania tylko wlasnie eclipse/netbeans wiec wyglada mi to na hejt w stylu: Microsoft - gówniane.

Mi nic nie sypie, a tego hejta to skąd wziąłeś?

Jednego dnia siadłem do androidowego API i w ciągu kilku godzin napisałem gierkę, która działała jak trzeba - nikogo o nic nie musiałem pytać, ton dokumentacji też nie wertowałem, dev guide przeczytałem aby i przejrzałem dema, testowałem na androidzie x86. Apk działał na telefonie tak samo.

Życie jest proste, gdy się nie jest idiotą. Polecam.

W takim razie twoje zycie chyba wcale nie jest takie proste..

tak myslalem jestes kozakiem, do pięt ci nie dorastam. Wszystko wynalazles sam, wszystko wymysliles, nigdy nie potrzebowales niczyjej pomocy. I jeszcze pewnie napisales sobie wlasny emulator andka i wlasne srodowisko i wlasne api. Ba. gogle tworzac swoja wersje systemu posilkowalo sie twoimi radami.

assemblera x86 i avr znam, jednak tak sie sklada ze nie uzywam go bez wyraznej potrzeby.

wg mnie emulator ktory wyciaga 3fps i włącza się 6 minut, a aplikacje uruchamia wtedy jak mu sie zachce a nie wtedy jak mu sie wyda takie polecenie, to gówniane środowisko do pracy.

za wysoki poziom tego forum, tu są sami ludzie którzy debugują pliki hex w notatniku. spadam stąd, narx

0
Orzeszekk napisał(a)

tak myslalem jestes kozakiem, do pięt ci nie dorastam. Wszystko wynalazles sam, wszystko wymysliles, nigdy nie potrzebowales niczyjej pomocy.
Z takimi jak ty to nawet dyskusji nie ma... Gadaj sobie zdrów, ale jeśli już mówisz do mnie, ty przynajmniej czytaj co ja pisałem i odpowiadaj adekwatnie, bo już co najmniej 3-ci raz w tym temacie wymyślasz sobie coś i odpowiadasz na to wymyślone coś, kompletnie zlewając to co ja napisałem. Uczepił żeś się mnie jak rzep psiego ogona i gadasz sobie aby tylko docinać. Hejcisz po prostu bez powodu, bo wielka twoja duma urażona została, że na początku napisałem ci, iż nie czytasz dokumentacji i robisz głupie rzeczy - i taka jest prawda - sam żeś przyznał, że nie chciało Ci się przedzierać przez "tomy zbednej dokumentacji", poza tym sam fakt, że robisz sleep w wątku zdarzeń już mówi samo za siebie. Dziecinada, penie...

Orzeszekk napisał(a)

assemblera x86 i avr znam, jednak tak sie sklada ze nie uzywam go bez wyraznej potrzeby.

Chwalisz się tym, że znasz trochę asma czy żalisz tym, że mylisz język z prograem? Coś ci wytłumaczę, bo chyba w twej łepetynie rozumowanie szwankuje. Napisałem wyżej, że sprawnie mi poszło napisanie apki na androida, żeby dać przykład, że się da - tak po prostu przeczytać dev guide i dema ze zrozumieniem i nie mieć problemów. A ty co pomyślałeś, że się chwalę? Płytko...

Orzeszekk napisał(a)

wg mnie emulator ktory wyciaga 3fps i włącza się 6 minut, a aplikacje uruchamia wtedy jak mu sie zachce a nie wtedy jak mu sie wyda takie polecenie, to gówniane środowisko do pracy.
Pewnie, odpal emulator arm z softwarowym rendererem na windzie x86 i narzekaj, że za wolno działa.

Orzeszekk napisał(a)

pliki hex
chyba ci się znowu pojęcia pomieszały.

0

a kij, nic nie bede na to odpowiadał, to moze sie odczepisz. tak tylko na marginesie avr to nie program tylko rodzina mikroprocesorow.

1 użytkowników online, w tym zalogowanych: 0, gości: 1