Uma introdução ao App Inventor O App Inventor possui uma interface baseada na web altamente visual, possibilitando a criação de um aplicativo para o seu dispositivo Android. Seu ambiente visual envolve a junção de blocos de instruções codificadas por cores; facilitando, dessa forma, seu uso. Torna relativamente fácil a construção de um aplicativo simples e, com um pouco de prática, de aplicativos complexos Interface de programação visual do Google, o App Inventor é fruto de pesquisa e desenvolvimento no MIT. App Inventor e os projetos nos quais se baseia foram construídos por teorias de aprendizagem construtivistas, que salientam que a programação pode ser um veículo para se engajar idéias poderosas através de uma aprendizagem ativa. Google acredita no App Inventor App Inventor vai abrir portas para que as pessoas se tornem criadoras de tecnologia e não apenas consumidoras: "Muitas pessoas possuem um dispositivo móvel e acesso à Internet sempre a alcance. App Inventor para Android dá a todos, independentemente da experiência de programação, a oportunidade de controlar e remodelar a sua experiência de comunicação". Tradução livre de http://googleblog.blogspot.com/2010/07/app-inventorfor-android.html Iniciando Vá ao site: appinventor.mit.edu/ Use sua conta do google para logar. Tela de desenvolvimento Ao lado está a tela de desenvolvimento do App Inventor. Ela é composta por duas grandes áreas, a de designer e a de blocos. Detalharemos cada uma delas. Iniciaremos com área de designer, ilustrada ao lado. User Interface • • • Button (botão): Muitos aspectos da sua aparência pode ser alterado, bem como se é clicável (Ativado), pode ser alterado no Designer ou no Editor de blocos; CheckBox - Caixa de seleção que gera um evento quando o usuário clica nela. Existem muitas propriedades que afetam a sua aparência, elas podem ser definidas tanto no Editor de Designer quanto no Editor de blocos; Clock - Componente não-visível que pode servir como relógio do telefone, timer ou ser usado para realizar cálculos de tempo; User Interface • • • Image - Componente para exibir imagens. Pode ser especificado no Designer ou no Editor de blocos; Label - Exibe um pedaço de texto que é especificado através das propriedade “Text”; ListPicker - Definir a propriedade “ShowFilterBar” para true (verdadeira), fará com que uma lista se torne “pesquisável”. Possui outras propriedades que afetam a aparência de um botão (TextAlignment, BackgroundColor etc) e se esse botão pode ser clicado (habilitado); User Interface • • • • • Notifier - Componente de notificação que exibe diálogos de alerta, mensagens e alertas temporários. Além disso, cria entradas de registro Android; PasswordTextBox - Uma caixa para digitar senhas. É o mesmo que o componente de caixa de texto normal, apenas não exibe os caracteres escritos pelo utilizador; Slider - É uma barra de progresso; TextBox - Caixa para que o usuário insira texto (campo de texto); WebViewer - Componente para visualizar página web. Layout • • HorizontalArrangement - Elemento de formatação no qual os componentes devem ser exibidos da esquerda para a direita; TableArrangement - Elemento de formatação no qual os componentes devem ser exibidos na forma de tabela; VerticalArrangement Elemento de formatação no qual os componentes devem ser exibidos de cima para baixo. Media • • • • • Camcorder - Um componente para gravar vídeos; Camera - Componente para fotografar; ImagePicker - Quando o usuário escolhe um ImagePicker, a galeria de imagens do dispositivo aparece e o usuário pode escolher uma imagem; Player - Componente multimídia que reproduz áudio e controles de vibração; Sound - Um componente multimídia que reproduz arquivos de som ou, opcionalmente, vibra pelo número de milissegundos especificados no Editor de blocos; Media • • • • SoundRecorder - Componente multimídia que grava o áudio; SpeechRecognizer - Componente que utiliza o reconhecimento de voz para converter a fala em texto; TextToSpeech - Componente que lê um texto e o converte em mensagem falada; VideoPlayer - Componente capaz de exibir vídeos. Drawing and Animation • • • Ball - Um sprite, que deve ser colocado em um Canvas, onde ele poderá reagir a toques e ser arrastado, além de interagir com outros sprites e mover-se de acordo com seus valores de propriedade; Canvas - Um painel retangular bidimensional sensível ao toque no qual um desenho pode ser feito e sprites podem ser movidos. ImageSprite - Um sprite que pode ser colocado em um Canvas. Sensors • • • • AccelerometerSensor - Componente não-visível, que pode detectar e medir a aceleração do dispositivo; BarcodeScanner - Componente para usar o scanner de código de barras para ler um código de barras; LocationSensor Componente não-visível fornecendo informações de localização, incluindo a longitude, latitude, altitude (se suportado pelo dispositivo) e endereço; OrientationSensor- Componente não-visível que fornece informações sobre orientação física do dispositivo. Social • • • • • ContactPicker - Um botão que, quando clicado, exibe uma lista dos contatos para escolha; EmailPicker - É um tipo de campo de texto; PhoneCall - Componente não-visível que faz uma chamada telefónica para o número especificado na propriedade PhoneNumber; PhoneNumberPicker - Um botão que, quando clicado, exibe uma lista contendo os números de telefone dos contatos; Sharing - Componente não-visível, que permite o compartilhamento de arquivos e/ou mensagens entre o seu aplicativo e outros aplicativos instalados em um dispositivo; Social • • Texting - Um componente que, quando o método SendMessage é chamado, envia uma mensagem de texto especificado na propriedade Message para o número de telefone especificado na propriedade PhoneNumber; Twitter - Um componente não-visível que permite a comunicação com o Twitter. Storage • • • FusiontablesControl - Um componente nãovisível, que se comunica com o Google Fusion Tables; TinyDB - Componente não-visível que armazena dados para um aplicativo; TinyWebDB - Componente não-visível que se comunica com um serviço Web para armazenar e recuperar informações. Connectivity • • • • ActivityStarter - Um componente que pode iniciar uma actividade usando o método startActivity; BluetoothClient - Cliente; BluetoothServer - Servidor; Web - Componente não-visível que funções para HTTP GET, POST, PUT. fornece Tela Agora que conhecemos os componentes que podem ser usados, falaremos sobre a tela. A imagem ao lado, ainda na parte de designer, representa a tela do aplicativo. Assim, você deverá arrastar os componentes necessários ao seu aplicativo para ela. Os componentes não visíveis, ainda que não apareçam na tela, também devem ser arrastados para ela. Você pode dispor os componentes visíveis da forma que quiser utilizando os componentes de layout para isso. Componentes É aqui que estarão os componentes presentes no seu aplicativo (os que você arrastou para a tela). É possível renomeá-los e deletá-los. DICA: Nomeação dos componentes é importante! Um nome auto-explicativo fará com que você saiba utilizá-los corretamente na parte da programação em si (na área de blocos). Propriedades Cada componente possui propriedades específicas como tamanho, nome de exibição (para um botão ou um label, por exemplo), tamanho, se são visíveis ou não etc. Essas propriedade não são inalteráveis uma vez definidas, pois muitas delas podem ser alteradas na parte do Editor de Blocos (área de blocos, a ser explicada em breve). Adicionar tela e mudar de área Acima temos a barra superior. Nela fica exibido o nome que você escolheu para o aplicativo, em qual tela do aplicativo se está trabalhando e o botão para adicionar ou remover uma tela. Além disso, na extrema direita estão os botões de Designer e Blocks, é através deles que você troca entre as áreas de designar e programação dos blocos. Até agora temos discutido a parte de Designer. Vamos então conhecer um pouco sobre a parte de Blocks. Blocks Por fim, temos a área de blocos. É nela que se dará a especificação do comportamento do aplicativo. DICA: Adicione primeiro todos os componentes na área de designer antes de começar a parte de blocos! Blocos: Control Os Control blocks são os blocos responsáveis por realizar o controle de eventos. Por exemplo, temos IF THEN (se ‘tal coisa’ ocorrer, então faça isso), o WHILE DO (enquanto ‘alguma coisa’ estiver ocorrendo/for verdadeira, faça isso) etc. Blocos: Logic Esses são os blocos responsáveis por auxiliar operações lógicas. Comparação entre números (se são iguais, maiores, menores etc). Também temos operadores importantes como AND, OR e NOT. Além do TRUE e FALSE. Blocos: Math Esses blocos contém as operações matemáticas como adição, subtração, divisão e multiplicação. Além de calcular raiz de um número ou proporcionar números aleatórios ou apenas um número específico. Blocos: Text Blocos responsáveis por realizar manipulações ou operação com texto. Possibilita comparação entre textos, união de textos ou simplesmente a adição de um texto. Blocos: List Blocos responsáveis por realizar manipulações ou operação com listas. Possibilita criação de listas, adição de um item a uma lista, verificar se uma lista está vazia etc. Blocos: Colors Blocos contendo cores. Permite também a criação de uma cor diferente das exibidas, por meio da ajuda de uma lista e de números. Blocos: Variables Responsáveis pelo criação manipulação de uma variável. e Blocos Além dos blocos discutidos, cada um dos componentes possui seus próprios Blocos. Clique no bloco e arraste-os para a parte de Viewer. DICA: Você também pode usar a tecla tab do teclado e digitar o bloco que deseja. Exemplo 1 - Calculadora Agora que você já conhece como funciona o App Inventor, vamos fazer alguns exemplos. Para nosso primeiro exemplo, criaremos uma calculadora. Nossa calculadora, recebe dois números e uma operação (podendo ser de soma, adição, subtração ou divisão), e retorna o resultado equivalente. Com os conhecimentos aprendidos, você consegue imaginar como fazer uma? Exemplo 1 - Calculadora Na área de designer, adicionamos dois campos de texto (para receber os números de entrada) e quatro botões dispostos horizontalmente(responsáveis por uma das operação - o texto no botão indica qual). Além disso, 2 labels: um contendo o texto “resultado: ” e outro para exibir o resultado propriamente dito (ambos os labels dispostos horizontalmente). Exemplo 1 - Calculadora Na parte da programação, temos quatro blocos, especificando o que ocorre quando se escolhe cada um dos botões. Quando se clica no botão de multiplicar, ele mudará o texto no label que nomeamos como “resultado” para o resultado da operação de multiplicação entre o texto contido no 1º e 2º campo de texto (se forem números). E assim por diante. Exemplo 2 - Calculo de mdc Faremos agora um aplicativo que recebe dois números e calcula o mdc entre eles. Com os conhecimentos aprendidos, você consegue imaginar como fazê-lo? Exemplo 2 - Calculo de mdc Para o designer desse, precisamos de 2 arranjos horizontais contendo um label e um campo de texto (para receber os dois números) e um botão. Além disso, de um arranjo horizontal que ficará incialmente invisível, este contendo dois labels e será responsável por exibir o resultado. Exemplo 2 - Calculo de mdc Para calcular o mdc, criamos 3 variáveis: a, b e mdc. “a” recebe o valor do 1º número e b do 2º (contidos nos campos de texto 1 e 2). Então, utilizamos o algoritmo de Euclides para realizar o cálculo. Exemplo 3 - Calculo de raízes Agora, vamos fazer um aplicativo calcula as raízes de uma função do 2º grau. Ele recebe o valor dos coeficientes a, b e c de uma função na forma ax² + bx + c, com “a” diferente de 0, e retorna o valor das raízes. Exemplo 3 - Calculo de raízes Na parte de designer, adicionamos um label para as instruções. Três arranjos horizontais compostos por label e campo de texto (para receber os valores) e um botão para “calcular raízes”. Além disso, mais dois arranjos horizontais com 2 labels, para exibir o resultados das raízes (e colocamos sua visibilidade para invisível). Exemplo 3 - Calculo de raízes Para entender o cálculo aqui é preciso ter em mente como se faz o cálculo matemático das raízes de uma equação do segundo grau. Lembre-se que delta é b² - 4*a*c e que x’ = (-b + sqrt(delta))/2*a x’’ = (-b - sqrt(delta))/2*a. Tendo isso em mente, consegue entender o código? Exemplo 3 - Calculo de raízes Primeiro, inicializamos seis variáveis: a, b, c, delta, r1 e r2. Claramente, a, b e c serão os coeficientes da equação. Delta será o delta necessário para o cálculo. E, r1 e r2 serão os nossos resultados (equivalente ao x' e x'').Assim, quando o botão for clicado, saberemos que nosso "a" será igual ao valor que está no 1º campo de texto, b será o valor do 2º, e "c" o do 3º. Como é uma equação do 2º grau, "a" deve ser diferente de zero e portando, só realizaremos o cálculo se essa condição for respeitada (ou seja, "if get global a =! 0"). Se o "a" for 0, o aplicativo irá apenas informar isso (Else, set Label6.Text to "coeficiente “a” deve ser diferente de 0"). Exemplo 3 - Calculo de raízes No caso de “a” diferente de zero, iremos fazer os cálculos. Assim, nosso delta será b² - 4*a*c. Depois tiramos a raiz de delta. Calculamos então r1 como (-b + delta)/2*a e r2 como (-b - delta)/2*a … já que nosso delta aqui equivale a raiz de delta. Por fim, colocamos os resultados nos labels correspondentes e tornamos o arranjo horizontal deles visível. Exemplo 4 - Investigar triângulos Nosso exemplo agora é um aplicativo que realiza a avaliação de três números para indicar: (i) se formam um triângulo; (ii) sua classificação quanto aos lados (equilátero, isósceles ou escaleno); (iii) sua classificação quanto aos ângulos (acutângulo, retângulo ou obtusângulo). Exemplo 4 - Investigar triângulos Adicionamos alguns labels com informações sobre o aplicativo, 3 arranjos horizontais para receber os números a serem investigados e um botão. Além disso, 3 arranjos horizontais invisíveis inicialmente que serão responsáveis por exibir o resultado. Exemplo 4 - Investigar triângulos Primeiramente, adicionamos 6 variáveis: x, y, z, maiorLado, lado1 e lado2. Quando o botão é clicado, x, y e z receberão os valores contidos nos campos de texto 1, 2 e 3 respectivamente. Então o algoritmo verifica se algum dos três valores é menor ou igual a zero (já que não pode haver um triângulo com lados negativos ou nulos). Ou seja, se get global x <= 0 OR get global y <= 0 OR get global z <= 0, saberemos que os números não formam um triângulo. Exemplo 4 - Investigar triângulos Caso nenhum dos lados seja menor ou igual a zero, se a soma de um dos lados for maior que a soma dois outros dois lados (get global x > get global y + get global z OR get global y > get global x + get global z OR get global z > get global y + get global x), também não é possível que formem um triângulo. Caso contrário, eles formam um triângulo e então podemos classificá-lo. Encontramos o maior lado testando se (get global x => get global y e get global x => get global z), sabemos nesse caso então que x é o maior lado (testamos isso para os outros casos também). Exemplo 4 - Investigar triângulos Então, se o quadrado do maior lado for MAIOR que a soma dos quadrados os outros lados, o triângulo é obtusângulo. Se o quadrado do maior lado for IGUAL a soma dos quadrados os outros lados, o triângulo é retângulo. Se o quadrado do maior lado for MENOR a soma dos quadrados os outros lados, o triângulo é acutângulo. Para a classificação quanto aos lados, verificamos se todos os lados são iguais (get global x = get global y AND get global y = get global z), nesse caso, ele é equilátero. Se pelo menos dois dos lados forem iguais (get global x = get global y OR get global x = get global z OR get global y = get global z ), ele é Isósceles. Caso contrário, é escaleno. ... - Dúvidas; - Sugestões; - Ideias para projetos.