• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    LWEEKAndroid development
    Diskuse o vývoji aplikací pro platformu Android.
    -----------------
    Tipy, Triky, Postřehy, Začátečnický help, Nápady na nové aplikace.

    Oficiální developerská stránka: http://developer.android.com
    Něco málo v češtině na WiKi android fora: http://wiki.androidforum.cz/index.php/Programov%C3%A1n%C3%AD
    Článek na Zrojáku: http://zdrojak.root.cz/clanky/vyvoj-pro-android-ii/

    Docela zajímavé tutoriály přímo od vývojářů ze Sony Ericsson:

    na tvorbu vlastního View adapteru
    http://blogs.sonyericsson.com/developerworld/2010/05/20/android-tutorial-making-your-own-3d-list-part-1/

    zajímavý nápad na zoomování jedním prstem - aneb vytváření gest
    http://blogs.sonyericsson.com/developerworld/2010/05/18/android-one-finger-zoom-tutorial-part-1/
    rozbalit záhlaví
    LWEEK
    LWEEK --- ---
    JOHNY_G: Ha ha, dík :-)
    JOHNY_G
    JOHNY_G --- ---
    LWEEK: Počítám, že už jsi na pokraji šílenství z takového úkolu všechna čistá řešení s propagací eventů vyzkoušel, takže to zkusme ručně :-D. Musíš se progetovat k příslušné Drawable (nevím, jestli to máš jako background, src, nebo kýhočerta) a na ní zavolat setState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}) a třeba za čtvrt sekundy zase reset na setState(new int[]{}). Když najdeš RippleDrawable (na API 21+), tak si to můžeš vycastovat a zaměřit pomocí setHotspot(0.5f, 0.5f) (aspoň myslím, že jsou to relativní souřadnice, to už si vyžehlíš). Pěkná čuňárnička :-).
    LWEEK
    LWEEK --- ---
    Tak jsem to vyřešil, ale přišel jsem o ripple efekt. Netušíte jestli jde nějak zobrazit na parentu ripple efekt pokud dojde ke clicku v childu?
    LWEEK
    LWEEK --- ---
    Vyrábím tabulky. Potřebuju aby se to scrolovalo horizontálně i vertikálně. Ale aby to bylo vtinější mám tam takzvané sticky sloupce které mohou být nalevo i napravo. Ale potřebuju aby když uživatel klikne kamkoliv tak to zaznamenalo klik "na řádek" a zároveň aby fungoval vnitřní scroll a tlačítka které mohou být vnořené jak v prostřední horizontálně scrollovacím view tak i v těch postraních. Už mi z toho malinko hrabe. :)
    JOHNY_G
    JOHNY_G --- ---
    LWEEK: Interceptovat můžeš, ale pokud to nechceš zkonzumovat, tak musíš vrátit false, tím pádem ty eventy probublají dál.

    Většinu podobných bolehlavů vyřešíš tím, že vyměníš ScrollView za NestedScrollView, který má většinu podobných scénářů ošetřenou. V ideálním případě upravíš návrh tak, aby tam nesting vůbec nebyl (neznám tvůj use case, ale v případě HorizontalScrollView může být alternativou ViewPager), ale ne vždycky to jde, a vždycky je to opruz :-)).
    LWEEK
    LWEEK --- ---
    OK, tak pokrok. Už vím že bych dispatchTouchEvent neměl používat a měl bych použít onInterceptTouchEvent. Jenže pořád tam je ta otázka. Jak odchytit klik aniž bych tím zabil scrolování vnořeného HorizontalScrollView. Protože jakmile pošlu MotionEvent.ACTION_DOWN tak si to převezme ScrollView a mám smůlu. Když si ACTION_DOWN interceptnu tak to funguje ale zabiju tím scrollování. Takže mi pořád uniká klíčový pattern.
    LWEEK
    LWEEK --- ---
    Snažím se pochopit jak Android zpracovává doteky. Co jsem pochopil:
    - touch bublá skrze hirearchii z window dolu do views (dispatching)
    - pak bublá zpátky přes (onTouch) ...

    Co nechápu je intercepting.

    Co potřebuju vyřešit.

    Mám RecyclerView .. v něm mám row s LinearLayoutem a v něm mám HorizontalScrollView. Ten HSV si bere veškerý touch který potřebuju detekovat v LinearLayoutu. Potřebuju poznat že jde o click a pak to gesto neposlat dolu a zachytit ho v LinearLayoutu.

    Jenže teď jak na to když MotionEvent je nejprve DOWN, pak MOVE a pak UP. Jenže klik umím zjistit až ve chvíli kdy je event UP a to je už pozdě protože v tu chvíli si ty eventy už konzumuje HSV. Nějaký nápad nebo pattern jak se tohle běžně řeší?

    Díky!
    LWEEK
    LWEEK --- ---
    Zdravím, zase mám problém. :) Mám ConstraintLayout a v něm HorizontalScrollView .. a na tom ConstraintLayoutu mám onClickListener ale je "hluchý". Je možné, že touch konzumuje HorizontalScrollView. Jinak si to neumím aktuálně vysvětlit. Dá se tomu nějak předejít aby nekonzumoval a posílal dál?
    JVCNC
    JVCNC --- ---
    S klavesnici a layoutem jsem se sral tak dlouho az jedine uspokojive reseni byla klaveanice vlastni s polem kde se mi zobrazuje to co vlastne pisu, do te doby strasnej provlem protoze ne vsechna poleuzou byt nahore aby byla videt i s klavesnici
    DRIZDIK
    DRIZDIK --- ---
    MIKULAS: Přesně, mě štve i ten WhatApp co si tam tu notifikaci občas hodí, aby neměl označenou práci za podezřelou.
    JOHNY_G
    JOHNY_G --- ---
    MIKULAS: Ja si je prepinam na silent & minimized, taky nemam rad nahore ikonky. Ale mas samozrejme pravdu. Vysvetlit to uzivatelum je nadlidsky vykon a radsi to smazou :-).
    MIKULAS
    MIKULAS --- ---
    JOHNY_G: a když přece vyhraješ, tak to bude muset být super-mega-užitečná appka, aby se uživatelé byli ochotni stále koukat na tu sticky notifikaci - což je většinou nepřekonatelný UX problém - lidé mají rádi to oznamovací centrum vyčištěné
    JOHNY_G
    JOHNY_G --- ---
    DATEL: Řešili. Můžeš se dostat poměrně daleko, když to bude foreground s persistentní notifikací, bude STICKY, a když uživatele provedeš až do nastavení systému, ale nikdy nevyhraješ úplně :-(. U některých výrobců nevyhraješ nikdy. Musíš využívat času, kdy je aplikace v prostředí, a tu servicu si znovu nakopnout.
    DATEL
    DATEL --- ---
    DRIZDIK: Prave ze jak to vypada dle logu, tak Doze mode se mi spusti i v te foreground service. Zkusim jeste vypnout optimalizaci baterie pro tu aplikaci (Honor ). A diky za ten tip na ACTION_REQUEST, kouknu na to, co by to melo umet.
    DRIZDIK
    DRIZDIK --- ---
    DATEL: Pak to mohou být nějaké optimalizace kvůli baterii, to se dá ještě obejít pomocí ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, ale to už je i na mě vyšší dívčí, ve zkratce je tam ještě Doze mode, který by ale měli Foreground Services pozdržet, ale každý systém se pak k těm services chová jinak .. největší dementi v tomhle bývají u Huawei a Xiaomi aby to vypadalo, že baterie dlouho vydrží.
    SUK: Tam se o komunikaci většinou stará Google Play Services (Firebase Notifikace) ..
    DATEL
    DATEL --- ---
    Hm, tak testovaci aplikace sice stale bezi, ale v logu jsou videt casova okna (loguju kazdou minutu). Wake lock na tohle asi reseni nebude, to by system tu aplikaci brzo sejmul pocitam. Jak tohle resi treba GPS tracker aplikace? Nebo ty to maji dane tim, ze dostavaji polohu? Je mozne, ze kdyz bych kazdou tu minutu delal ping na server, ze by tam ty okna (Doze?) nebyly?
    DATEL
    DATEL --- ---
    DRIZDIK: Pocitam prave s foreground a notifikaci. Ted jsem delal testovaci aplikaci, kazdou minutu mi zaloguje cas do souboru, zatim mam navic jen boot receiver. Ten JobScheduler tam mam v planu dodat zitra, prave na situace, kdy to stejne system sejme. Akoraz tam je myslim limit nejkratsiho intervalu 15 minut :-( Navic mam dojem, ze sluzba sice bezi na popredi, ale v logu mam okna, kdy se nic nezalogovalo. Ale to muze byt tim, ze to loguje v jinem vlakne spoustenem v te sluzbe.
    SUK
    SUK --- ---
    DRIZDIK: Jo. A kdyz je neco push ze serveru, tak co to prijima? Na to existuje nejaky genericky zpusob? Btw, cim by mohlo byt, ze prave ta moje vec, ac ma nastaveny velmi nizky interval, tak se syncuje velmi nepravidelne?
    DRIZDIK
    DRIZDIK --- ---
    SUK: Můýže to zabít, některé věci zase automaticky ožijou (sticky services), něco ani take (případ force-close) Většina těchhle synchronizací je buď schedulovaná(aby ti právě stále něco neběželo na pozadí) nebo pushovaná ze severu.
    SUK
    SUK --- ---
    DATEL, DRIZDIK: Chapu-li dobre, tak system si muze dovolit zabit cokoliv, nezavisle na uzivatelskem nastaveni, pokud to nezobrazuje notifikaci? Jak funguji treba synchronizace kalendare/kontaktu atd? Osobne s tim mam prave trosku problem, ze se mi nesyncuje kalendar (CalDAV) kdovijak casto.
    DRIZDIK
    DRIZDIK --- ---
    DATEL: Nemusí .. je známej případ kdy ty systémy občas dělali force-stop, což ti nedovolí té appce znovu najet. S foreground servicem musíš stále zobrazovat notifikaci. Druhá možno je kombinace backgroundu a workmanageru, který by měl naplánované pingání.
    Kliknutím sem můžete změnit nastavení reklam