thegoodfellas/blogset-br huggingface dataset:
e mais brigas, tantas incertezas.Muitos erros, muitas falacias,Odeio quando temos conversas acidas,Somente o nosso melhor devemos inspirar, Apenas paixao e carinho devemos transpirar.Temos que escalar o muro das saudades,Brigar por nossas liberdades,Vencer a tormenta no mar das agonias,Para chegar em terra firme E acharmos nossas alegrias.Nosso futuro sera dentro de uma flor, Nos internaremos em um convento de amor.
execucao voce pode guarda-la no xml e a tempo de execucao carregar o xml e fazer os ajustes necessarios no codigo.Para salvar a animacao no xml primeiro crie uma pasta em res chamada anim e adicione seus arquivos de animacao xml la. Por exemplo: <?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="@integer/animation_duration" android:fromXDelta="-100%" android:toXDelta="0%" />Esse xml representa uma TranslateAnimation, com uma duracao definida em outro recurso (da mesma forma como fazemos com strings) e a view animada saira da posicao -100%, ou seja o tamanho dela para esquerda, ate a posicao atual dela. Os outros tipos de animacoes funcionam de forma parecida. Nao irei explicar todos pois e facil entender com a documentacao, content assistent e um pouquinho de conhecimento em ingles.Para recuperar o objeto Animation a partir do xml e simples:Animation animation = AnimationUtils.loadAnimation(this, R.anim.to_left_100);Sendo o primeiro parametro o Context (que pode ser a propria Activity) e o segundo o nome do arquivo que voce salvou sua animacao.E para criar uma animacao direto no codigo? Muito simples tambem. O codigo a seguir executa a mesma animacao definida no xml:Animation animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, -100.0F, Animation.RELATIVE_TO_SELF, 0.0F, Animation.RELATIVE_TO_SELF, 0.0F, Animation.RELATIVE_TO_SELF, 0.0F);animation.setDuration(getResources().getInteger(R.integer.animation_duration));Agora ja sabemos como criar e obter uma instancia de Animation. Fazer essa animacao ser executada por alguma view e bastante simples:mView.startAnimation(animation);Hoje nosso tutorial fica por aqui. No proximo iremos aprender alguns defeitos dessas animacoes, como corrigi-los e como integrar a animacao com a aplicacao de forma consistente e util. Para treinar o que aprendemos aqui sugiro fazer um aplicativo teste com um botao e uma imagem. Ao clicar no botao a imagem de move em relacao a ela e em relacao a tela, rotaciona, aumenta e diminui, muda transparencia... enfim, use sua criatividade. Depois faca a mesma coisa com o botao setando fillAfter como true e tente enxergar o defeito que iremos explicar no proximo post.Ate mais.
nao muito usadas, que nao devem ficar o tempo todo expostas na tela. Assim o usuario sempre sabe que ha algumas funcionalidades que nao estao na tela mas que ele sabe como acessa-las.E uma funcionalidade muito simples de implementar. Assim como o layout, voce pode definir o menu em tempo de execucao, atraves do codigo java ou atraves de um arquivo xml. Se seu menu for em grande parte estatico, e uma boa pratica defini-lo no xml. Para isso, crie uma pasta em res com nome menu (se ja nao tiver criado) e adicione um novo arquivo xml, por exemplo, menu.xml:<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/news" android:icon="@android:drawable/ic_menu_recent_history" android:title="@string/novidades"/> <item android:id="@+id/sobre" android:icon="@android:drawable/ic_menu_info_details" android:title="@string/sobre"/></menu>Nesse menu definimos apenas dois itens, um item de Novidades e outro de Sobre. Note que definimos um id, que sera usado no codigo, um icone (opcional) e um titulo. A seguir precisamos dizer para Activity usar esse xml para montar o menu quando o usuario apertar o botao de menu. E isso tambem e bastante simples. Basta adicionar esse codigo na classe de sua Activity: @Override public boolean onCreateOptionsMenu(Menu menu){ super.onCreateOptionsMenu(menu); MenuInflater mi = getMenuInflater(); mi.inflate(R.menu.menu, menu); return true; }O metodo recebe como parametro um Menu que deve ser usado para construir nosso menu. Com esse objeto podemos trabalhar adicionando, removendo ou editando itens do menu usando codigo java, mas nesse caso apenas carregamos os itens definidos no xml R.menu.menu, que foi construido anteriormente. Devemos retornar true para que o menu seja exibido. Esse metodo e chamado apenas uma vez, quando o usuario clica pela primeira vez no botao de menu. Se voce quer um metodo que e chamado toda vez que o usuario clica no botao de menu, talvez porque os itens do menu variem a depender do contexto da tela, voce deve usar o metodo onPrepareOptionsMenu, que recebe o mesmo parametro e funciona da mesma forma.Agora seu Options Menu ja pode ser exibido, mas ainda nao ha nenhuma acao associada, ou seja, o menu aparece, o usuario clica, mas nada acontece. Implementar isso tambem e bastante simples, basta adicionar o seguinte metodo na sua Activity: @Override public boolean onOptionsItemSelected(MenuItem item){ switch(item.getItemId()){ case R.id.news: showDialog(DIALOG_NEWS); return true; case R.id.sobre: showDialog(DIALOG_INFO); return true; } return super.onOptionsItemSelected(item); }Auto explicativo nao? Recebe como parametro o MenuItem clicado e voce deve tomar a acao apropriada. Geralmente se usa o switch decidindo qual rumo tomar a partir do id do item. Nesse caso e exibido um determinado Dialog para cada elemento. E uma boa pratica colocar as acoes a ser executadas por cada opcao em um outro metodo, assim o onOptionsItemSelected nao fica muito grande, sendo responsavel apenas por verificar qual opcao foi escolhida.Por hoje e so, coisa bem simples. Qualquer duvida nao hesite em perguntar!
milissegundos depois vai pro lugar que voce quer. Entao, sempre que possivel faca as alteracoes antes de executar a animacao, nao deixe isso pro onAnimationEnd.Destaquei esse ponto pois fiquei um bom tempo travado nele ate achar a solucao. Mas nem sempre a solucao que falei acima e possivel ser feita, entao ha uma outra solucao mais drastica: sobrescrever o metodo onAnimationEnd da view que esta sendo animada, pois esse sim e executado imediatamente apos a animacao ter terminado, de forma que se voce colocar os mesmos comandos aqui nao ocorrera o flash. Mas como fazer isso? Voce criar uma subclasse de todas os tipos de view que voce ira animar, mas provavelmente isso nao sera muito pratico. A melhor solucao que encontrei foi criar uma subclasse de FrameLayout que permite que eu adicione manualmente o meu OnAnimationEnd, dessa forma:public class AnimateFrameLayout extends FrameLayout { private OnAnimationEnd mOnAnimationEnd; public AnimateFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onAnimationEnd() { super.onAnimationEnd(); if(mOnAnimationEnd != null) mOnAnimationEnd.onAnimationEnded(); } public void setOnAnimationEnd(OnAnimationEnd listener){ mOnAnimationEnd = listener; }}Tive tambem que criar a interface OnAnimationEnd:public interface OnAnimationEnd { public void onAnimationEnded();}Entao quando eu preciso animar uma view que esta com esse problema eu coloco a view dentro desse AnimateFrameLayout e animo esse layout ao inves da view e seto meu listener de onAnimationEnd pro AnimateFrameLayout que estou animando e nao diretamente na instancia de Animation. O xml ficaria assim caso eu queira animar uma ImageView:<com.inmap.AnimateFrameLayout android:id="@+id/layout_map" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/mapl2" /> </com.inmap.AnimateFrameLayout>E no codigo basta eu fazer isso: AnimateFrameLayout mLayoutMap = (AnimateFrameLayout) findViewById(R.id.layout_map); mLayoutMap.setOnAnimationEnd(new OnAnimationEnd() { @Override public void onAnimationEnded() { if(!isShowingList) mLayoutList.setVisibility(View.GONE); } });Perceba que estou setando o OnAnimationEnd na view e nao mais no animation como era antes. Isso implica que esse metodo sera executado sempre que qualquer animacao aplicada na view (nesse caso e o mLayoutMap) terminar sua execucao, entao voce precisa de meios para garantir que apenas uma animacao seja realizada na view ou verificar qual animacao foi realizada para executar o codigo corretamente.Feito isso voce podera usufruir de animacoes como quiser, desde que se atente aos detalhes. A partir do Android 3.0 foi incluida um novo tipo de animacao que realmente altera as propriedades da view animada, nao sendo necessario usar esses metodos mostrados aqui. Mas isso e assunto para um outro tutorial.
Hoje o post sera um pouco diferente. Nao sera um tutorial ensinando a fazer algo, como tem sido em todos os posts. Hoje irei compartilhar um pouco da minha experiencia como desenvolvedor independente nesse mundo de aplicativos moveis para Android, alem de dar algumas dicas que acho importante para quem quer ou ja estar se aventurando nesse meio.Queria comecar falando de como eu entrei nessa. Comecei a me interessar pelo Android como plataforma de desenvolvimento no final de 2010. No inicio de 2011 comecei a assistir uns videos sobre desenvolvimento na plataforma e ler algumas paginas da documentacao (d.android.com). Entao comprei meu primeiro Android para sentir nas maos como funcionava a plataforma, se era amigavel comigo como usuario, ver na pratica se enxergava futuro. Mas gracas a Submarino, meu aparelho veio com defeito e demoraram horrores para oferecer uma solucao, no fim acabei por precisar comprar atraves de outra loja, meses depois. Devido a esses problemas e por eu estar estagiando e estudando acabei postergando meu aprendizado no Android.Apenas em julho de 2011, resolvi ir a fundo nessa. Larguei o estagio, comprei uns livros de desenvolvimento (na Amazon e em ingles, pois pelo menos nas livrarias daqui ainda nao tinha nenhum sobre), e comecei a estudar. Fiz o Hit Fallux! de forma despretensiosa, apenas para aprendizagem mesmo, e depois junto com Fred decidimos fazer um aplicativo comercial, ou seja, que tinha o objetivo de conseguir muitos downloads, ter boa satisfacao entre os usuarios e com isso gerar uma grana. Assim nasceu o Amor por SMS, que surpreendentemente chegou na pagina principal do Android Market com relativa facilidade.Depois disso nao parei mais. Lancei esse blog, que tem me forcado a manter uma rotina de estudo constante, e continuei crescendo. Pessoas me procuraram (e ainda procuram) para fazer aplicativos para elas, fiz alguns, e meu portfolio cresce cada vez mais.O MercadoNo momento que escrevo esse post, possuo 10 aplicativos publicados. Alguns fizeram sucesso, a maioria nao. A maioria foi desenvolvida para fazer sucesso, outros nao. Entao a primeira coisa que voce precisa saber se quiser se tornar um desenvolvedor independente e: como a maioria dos trabalhos autonomos, esse tambem e de risco. E possivel que voce gaste meses fazendo um aplicativo e nao ganhe mais que $50 de retorno, entretanto voce pode gastar 3 horas e ganhar mais de $700 (aconteceu comigo).Entretanto, eu enxergo como o melhor mercado para se trabalhar atualmente. Primeiro porque voce pode trabalhar de qualquer lugar do mundo, inclusive de sua casa, e vender para qualquer lugar do mundo em questao de minutos. Nao consigo enxergar outro mercado que ofereca isso. Talvez a web em si, entretanto ela nao possui um distribuidor centralizado de conteudo como o Android possui com o Google Play. Falo sobre o Android pois ele se mostra como tendencia, mas o mercado geral de aplicativos moveis fazem parte dessa realidade.E o Brasil? Pelo que percebo, ha uma grande falta de bons profissionais, logo ha poucos bons aplicativos brasileiros, e isso esta gerando uma corrida do ouro. Ha uns dois meses atras ocorreu o 1o Encontro de
'Startupeiros' de Salvador, e estava presente uma empresa focada em aplicativos moveis. No segundo encontro, que aconteceu ha uma semana, havia pelo menos umas cinco, inclusive a minha que esta em processo de formacao. Entao, a oportunidade esta ai, e e uma grande oportunidade.A seguir algumas dicas:1. ComeceSe voce quer se tornar um desenvolvedor Android qualquer coisa a primeira coisa que voce tem que fazer e comecar. Corra atras. Nao espere por um curso, ou aula, voce tem toda a internet a sua disposicao! Basta sentar e comecar!2. Faca bem feitoDetalhes fazem a diferenca. Nao importa se sua ideia e a melhor do mundo, se nao for bem implementada nao valera de nada. Isso inclui aspectos computacionais, como consistencia, tolerancia a falhas, performance, seguranca e aspectos do design, como interface com usuario, navegabilidade, estetica, etc. Um bom aplicativo tem que ter dois aspectos fundamentais: ser facil de usar e responder bem ao usuario. Entao se voce e apenas um programador, e bom comecar a se preocupar com esses "detalhes" ou procurar alguem que faca isso com voce.3. Cuidado com atualizacoesEu diria que e muito mais importante voce se preocupar com atualizacoes do que com o lancamento em si do aplicativo. Se voce lancar um aplicativo com muitos bugs, ou ruim de alguma outra forma, algumas pessoas vao baixar, te xingar, desinstalar e seu aplicativo nao ira se espalhar. Simples assim. Mas se voce tem um aplicativo de sucesso, funcionando, com usuarios ativos e que gostem do conteudo, preste muita atencao a esses aspectos quando for fazer uma atualizacao:Bugs e Falhas: Se o usuario tem um aplicativo que funciona e ao ser atualizado ele deixa de funcionar, ele vai ficar muito puto, principalmente se for um aplicativo pago. Pois alem de fornecer algo que nao funciona voce esta tirando algo que funcionava.Mudancas: Pessoas geralmente nao gostam que as coisas mudem sem ser consultadas, ou pelo menos avisadas. Se voce mudou algo importante no aplicativo, de uma opcao de deixar as coisas serem feitas como eram antes, ou pelo menos avise-as da mudanca.Voce nunca vai agradar a todos. Por mais interessante que seja uma funcionalidade que a atualizacao esta trazendo, provavelmente ela trara algo que alguem nao vai gostar. E e ai que entra a proxima dica.4. Ouca o seu usuarioSe voce e um desenvolvedor independente voce nao e apenas um desenvolvedor. Voce sera o gerente, o engenheiro, o publicitario, o relacoes publicas, o administrador, o contador, o suporte e o secretario. Entao se voce tem um projeto grande, talvez seja uma boa ouvir possiveis usuarios antes do produto ser lancado, seja apresentando prototipos a amigos, fazendo questionarios, discutindo ideias, etc. Mas depois de lancado, a quantidade usuarios que voce tera facilmente pode ultrapassar 50 mil. E importante ficar ligado no feedback deles, atraves dos comentarios no Google Play, ou ate mesmo fornecer seu e-mail para contato direto. E sempre que receber um contato direto, seja atencioso, gentil e trate seu cliente bem, ele vai gostar de saber que o produto que ele usa ouve as necessidades dele.5. Pense globalmenteVoce tem a possibilidade de
vender para o mundo todo, e quando falo vender nao necessariamente me refiro a downloads pago do aplicativo, download de aplicativos gratuitos que possuem outras formas de receita, como propagandas, tambem e uma venda. Entao a menos que seu aplicativo seja algo estritamente local, como a linha de metro da sua cidade, por exemplo, sempre considere pelo menos fazer seu aplicativo em portugues e ingles. Se possui conhecimento basico em alguma outra lingua, nao exite. E se voce acha, ou percebe que seu aplicativo e ou sera bastante usado em determinado pais, se esforce um pouco para coloca-lo na lingua local.6. Se atente a oportunidadesEsse e um mercado extremamente rapido. Oportunidades surgem e desaparecem na mesma velocidade. Fique ligado para notar as oportunidades, e assim que percebe-las desenvolva-as o mais rapido possivel. Comigo aconteceu o caso do Para nossa alegria, onde cheguei em casa num sabado de noite e minha prima me mostrou o video. Achei uma grande besteira, mas enxerguei uma oportunidade, afinal brasileiro gosta de besteiras. Na mesma hora sentei e pesquisei sobre aplicativos sobre isso e nao existia nenhum. Entao em 3 horas fiz esse dai. Quando terminei de fazer e pesquisei novamente, apareceu o meu e um outro tambem do para nossa alegria recem lancado. Mesmo assim acredito que tive um bom timming, pois ate agora ganhei R$ 1400 com ele.7. Aprenda sempreNao deixe para fazer seu produto quando voce ja souber tudo que tem que saber. Comece a desenvolver, e assim que as dificuldades forem aparecendo va aprendendo a implementando. Assim seu aprendizado sera muito mais consistente, pois voce aplicara na pratica o conhecimento recem adquirido. Procure sempre desenvolver tipos diferentes de aplicativos, assim como jogos, utilizando diferentes recursos que a plataforma pode oferecer, assim voce tera um amplo conhecimento sobre as possibilidades da plataforma.8. Guarde bem guardado sua keystorePra quem nao sabe a keystore e uma chave necessaria para assinar os aplicativos a serem distribuidos pelo Google Play. Se voce assinar com uma keystore e lancar no Play, voce so podera atualizar se continuar assinando com a mesma chave, ou seja, com o mesmo arquivo keystore. Entao mantenha um copia da keystore em um pen-drive, no seu e-mail, no dropbox, no HD, no HD externo e em qualquer outro lugar a fim de manter seguro. Eu nao fiz isso, deu problema no meu PC e perdi a keystore que usei no Amor por SMS, entao nao posso mais atualiza-lo.Por enquanto e isso. No mais so posso dizer que e muito bom trabalhar em casa, e que vale a pena. Financeiramente falando tambem.Ate mais.
= -1; } super.onTouchEvent(event); } void drawFrame() { final SurfaceHolder holder = getSurfaceHolder(); Canvas c = null; try { c = holder.lockCanvas(); if (c != null) { mover(); onDraw(c); } } finally { if (c != null) holder.unlockCanvasAndPost(c); } // Agenda proximo re-desenho mHandler.removeCallbacks(mDrawCube); if (mVisible) { mHandler.postDelayed(mDrawCube, 1000 / FPS); } } private void mover() { // Move a imagem x += SPEED*dirHorizontal; y += SPEED*dirVertical; if(y < 0 || y > height-mBitmap.getHeight()) dirVertical *= -1; if(x < 0 || x > width-mBitmap.getWidth()) dirHorizontal *= -1; } private void onDraw(Canvas c) { // Limpa tela e desenha a imagem c.drawARGB(255, 0, 0, 0); c.drawBitmap(mBitmap, x, y, null); } }}O que importa nesse Service e a Engine. Estendemos a classe Engine para que possamos definir nossos proprios metodos. Note que Engine fornece metodos de criacao, de alteracao da Surface, de mudanca (deslizamento) de tela, de toque na tela, entre outros. Voce deve sempre fazer algo no onVisibilityChanged para que quando o wallpaper nao estiver visivel ele pause o seu funcionamento, assim economizando recursos.Acesse a documentacao oficial e esse exemplo para mais informacoes.Qualquer duvida e so perguntar.
Diversas aplicacoes para Android podem e devem fazer uso do Google Maps, que e uma ferramenta incrivelmente poderosa e relativamente facil de ser usada. Esse tutorial explicara passo a passo como integrar o Google Maps na sua aplicacao, supondo que e utilizado Eclipse e/ou ADT (Android Development Tools). Esse tutorial foi baseado na pagina oficial de documentacao do Google Maps Android API v2 [1] e suas conexoes.Leia mais... Ola! Aqui no blog, ate agora, so fizemos posts e tutoriais sobre desenvolvimento, codigos, APIs, mas nao so disso sao feitos os aplicativos. Ja comentei sobre a importancia de um bom design na producao de um bom aplicativo, mas esse sera o primeiro post dedicado exclusivamente a isso.Por que se deve usar padroes? Se seu aplicativo utilizar padroes que o usuario ja conhece, entao ele tambem ja sabe como usar seu aplicativo. Ou seja, deixa o aplicativo mais facil de se utilizar, usuarios terao uma melhor experiencia, mais pessoas utilizarao e mais "vendas" voce tera.Entao se voce quer que muitas pessoas utilizem seu aplicativo, use sempre que possivel os padroes do Android. Claro que se houver algo muito unico a se fazer, ou se voce encontrou uma forma muito boa de fazer algo, use-o, mas tente deixar de uma forma que seja facil aprender essa nova utilizacao. A seguir irei abordar alguns padroes mais conhecidos, como e quando utiliza-los (ou nao):Action BarA Action Bar vem para solucionar alguns problemas comumente encontrado em aplicativos: voce quer que o usuario saiba onde esta, e quer oferecer acoes frequentes a facil acesso, e e exatamente isso que a Action Bar faz. Normalmente ela possui um logo que quando clicado leva a Home ou a navegacao Up, possui um titulo da tela atual e os botoes de acao frequentes. Em tablets ela tambem e usada para navegacao atraves de tabs ou spinners (dropdown lists).A partir do Honeycomb (3.0) a Action Bar passou a ser implementada nativamente, com classes no SDK que ajudam (e muito) na criacao e manipulacao da Action Bar. Em versoes anteriores ela tem que ser criada utilizando layouts, views, e isso fica a cargo do desenvolvedor.DashboardO Dashboard tem como objetivo definir um ponto de entrada para o seu aplicativo, exibindo as categorias (ou acoes) disponiveis. Geralmente apresenta um icone e um nome imediatamente abaixo e fica disposta em grade, geralmente de duas colunas para orientacao em portrait e tres colunas na orientacao landscape. Pessoalmente eu recomendo utilizar esse padrao apenas quando se tem varias categorias (entre 3 e 8) ou quando os itens representam coisas bastante distintas. Se esse nao for o caso, talvez seja melhor apresentar diretamente o conteudo para o usuario, pois muitas vezes o usuario nao sabe o que quer e logo de inicio ter que pedir para que ele decida algo pode nao ser muito bom.Quick ActionsO proposito desse padrao e apresentar opcoes de acoes sobre um determinado item. Funciona da seguinte forma: ao se clicar em um item (1) aparece um "pop-up" que possui referencia ao item clicado exibindo as acoes possiveis. Enquanto o pop-up estiver aberto, normalmente, ao tocar
em algum ponto fora do pop-up ele e dispensado, usando animacoes tanto na abertura quanto no fechamento.A vantagem desse padrao e que ele nao trava e ocupa toda a tela, atrapalhando menos o usuario. Esse padrao nao deve ser usado caso haja alguma acao muito mais frequente que as outras. Nessa caso talvez seja melhor usar um toque simples para a acao frequente e um clique longo exibindo um menu de contexto (ou ate mesmo o Quick Actions) com as outras acoes.Uma coisa importante: nunca tente copiar a interface ou design de outra plataforma para o Android. Esse e o maior problema da maioria dos programas que permitem que se crie aplicativos para multi-plataformas, o aplicativo criado dessa forma so vai ficar bom mesmo em no maximo uma plataforma, pois cada uma tem suas peculiaridades e forcar uma na outra so vai confundir o usuario.Por hoje e so. Se quiser saber mais sobre padroes comente no post dando sua opiniao e buscando no resto da internet. Ate mais.
as portas dovaticano para que Obama e Raul castro conversassem; segundo Obama, esse embargoprejudicou a populacao cubana e beneficiou a manutencao da ditadura dos castro. Alem do papa Francisco, o Canadatambem participou das negociacoes entre os dois paises; essas negociacoesduraram dezoito meses e durante o velorio de Nelson Mandela um comprimento deBarack obama ao ditador Raul castro, deixou algumas pessoas meio quedesconfiadas que, estava havendo uma negociacao entre os dois lideres onde Rauldisse a Obama que estava esperando um primeiro passo.Obama entao permite que cada americano gaste em cubano minimo quatrocentos dolares, reabre a embaixada americana em cuba, maisprecisamente em Havana, liberta treze reporteres cubanos que haviam sido presosnos EUA por espionagem e por outro lado Raul castro liberta cinquenta e trespresos politicos americanos, inclusive o famoso reporter Alan Gross. Os EUAainda se comprometeram em facilitar o acesso a internet em cuba, entrada deaparelhos eletronicos, automoveis na ilha, transacoes de bancos americanos emcuba entre outros. Ate a ONU aprovou quase unanimidade o fim do embargo aCuba, agora falta o congresso americano dar o aval para que tudo se resolvacompletamente.