. Desafio Código: Use APIs animação atualizada do Android para uma chance de ganhar, ganhos - Tudo Sobre Tecnologia

Uma vez que está lançando em 2007, o Android já percorreu um longo caminho. Leva apenas uma rápida olhada em alguns screenshots do Donut  ( Figura A ) e  KitKat  ( Figura B ) para ver o que quero dizer. 
Figura A
here_or_there_01_112013.png
  Figura B
here_or_there_02_112013.png
   
Se, como eu, você foi para o passeio, você provavelmente tem aplicações tanto no mercado ou, mais provavelmente aposentados que poderiam se beneficiar de algumas das novas APIs disponíveis. Assim, quando meu editor aqui no TechRepublic sugeriu que eu postar um código desafio para os leitores, eu decidi que faria sentido a poeira um exemplo antigo código que eu tinha que volta a colaborar com os leitores para agilizar lo usando algumas das APIs animação calhar introduziu começando com Honeycomb.


Quando eu olhar para o código agora eu me encolho e, provavelmente, você está fazendo o mesmo. Isso é bom - na verdade, é a idéia. Em um post posterior, vou compartilhar como lidar com esta animação usando o SDK Android atualizado. Vendo a versão simplificada do código ao lado do original realmente vai martelar o quanto de desenvolvimento Android tornou-se mais fácil.
Ah, e eu mencionei que nós vamos enviar TechRepublic presa ao leitor que se submete a refatoração mais elegante do código entre agora e depois? Não? Bem, nós o faremos.Portanto, tome alguns minutos para atualizar a amostra (por favor alvo Android 3.0 ou superior), fechá-lo e enviá-lo do meu jeito, no trole endereço de e-mail no TechRepublic dot com de 30 de novembro de 2013 . Mesmo se você não for um desenvolvedor Android, mas você está pensando em se tornar um, você deve tomar uma facada no desafio de código. Se você não tem experiência com o quadro de animação, animador objecto do Honeycomb ea subsequente exibição de propriedade animador pesquisando é um bom lugar para começar.
activity_main.xml
<RelativeLayout
xmlns: android = "http://schemas.android.com/apk/res/android"
android: layout_width = "fill_parent"
android: layout_height = "fill_parent"
android: orientação = "horizontal">
<Botão
android: layout_marginLeft = "20DP"
android: layout_width = "wrap_content"
android: layout_height = "wrap_content"
android: text = "AQUI"
android: layout_alignParentLeft = "true"
android: layout_centerInParent = "true"
android: id = "@ + id / here_button" />
<Ver
android: layout_width = "20DP"
android: layout_height = "20DP"
android: estofamento = "10DP"
android: background = "# FFFF0000"
android: id = "@ + id / cursor"
android: layout_toRightOf = "@ + id / here_button"
android: layout_centerVertical = "true" />
<Botão
android: layout_marginRight = "20DP"
android: layout_width = "wrap_content"
android: layout_height = "wrap_content"
android: text = "NÃO"
android: id = "@ + id / there_button"
android: layout_alignParentRight = "true"
android: layout_centerInParent = "true" />
</ RelativeLayout>
MainActivity.java
pacote com.authorwjf.hereorthere;
android.os.Bundle importação;
importar android.view.View;
importar android.view.View.OnClickListener;
importar android.view.animation.Animation;
importar android.view.animation.Animation.AnimationListener;
importar android.view.animation.TranslateAnimation;
importar android.widget.RelativeLayout;
importar android.app.Activity;
MainActivity public class Atividade implementos OnClickListener, AnimationListener {
int static final privado AQUI = -1;
int static final privado NÃO = 1;
privado TranslateAnimation anim;
Privado Ver cursor;
ScreenWidth int privado;
centerOfScreen int privado;
private int dest;
@ Override
protegido onCreate void (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
ScreenWidth = (int) (.. getWindowManager () getDefaultDisplay () getWidth ());
centerOfScreen = (int) (ScreenWidth * 0,5);
cursor = findViewById (R.id.cursor);
. findViewById (R.id.here_button) setOnClickListener (this);
. findViewById (R.id.there_button) setOnClickListener (this);
}
@ Override
public void onClick (Ver v) {
if (v.getId () == R.id.here_button) {
animar (AQUI);
} Else {
animar (não);
}
}
private void animado (int whichWay) {
if (anim! = null && anim.hasEnded (!)) return;
flutuar alvo;
int AtualX = cursor.getLeft ();
if (whichWay == AQUI) {
if (AtualX + cursor.getWidth () <= centerOfScreen) return;
target = (AtualX -
(FindViewById (R.id.here_button) Getleft () + findViewById (R.id.here_button) getWidth ().).) * -1;
} Else {
if (AtualX> centerOfScreen) return;
target = findViewById (R.id.there_button) Getleft () - (+ AtualX cursor.getWidth ()).;
}
anim = new TranslateAnimation (TranslateAnimation.ABSOLUTE, 0,
TranslateAnimation.ABSOLUTE, alvo,
TranslateAnimation.ABSOLUTE, 0.0f,
TranslateAnimation.ABSOLUTE, 0.0f);
anim.setDuration (500);
dest = (int) + alvo cursor.getLeft () + cursor.getWidth ();
anim.setAnimationListener (this);
cursor.startAnimation (anim);
}
@ Override
public void onAnimationEnd (Animação arg0) {
RelativeLayout.LayoutParams params =
novo RelativeLayout.LayoutParams (cursor.getWidth (), cursor.getHeight ());
if (dest> = centerOfScreen) {
params.addRule (RelativeLayout.LEFT_OF, R.id.there_button);
} Else {
params.addRule (RelativeLayout.RIGHT_OF, R.id.here_button);
}
params.addRule (RelativeLayout.CENTER_VERTICAL);
cursor.setLayoutParams (params);
}
@ Override
public void onAnimationRepeat (Animação arg0) {
/ / TODO Auto-generated stub do método
}
@ Override
public void onAnimationStart (Animação arg0) {
/ / TODO Auto-generated stub do método
}
}

Autor:

Sobre William J. Francis

William J Francis começou a programar computadores aos onze anos. Especializada em embedded e plataformas móveis, ele tem mais de 20 anos de engenharia de software profissional em seu currículo, incluindo um período de quatro anos em intellige Militar do Exército dos EUA ...

0 comentários Goocle+ 0 Facebook

Postar um comentário

 
Tudo Sobre Tecnologia © 2013-2020. Todos os direitos reservados. Tudo Sobre Tecnologia. Desenvolvido por TST
Topo