Aller au contenu

AAC : Android Airsoft Converter


Invité

Recommended Posts

Bonjour la communauté FrAndroid, nouvellement inscrit ici (1er Post)

J'ai récemment fait l'acquisition d'un LG "Eve", et donc en bon bidouilleur qui se respecte je me suis dit, pourquoi pas commencer à faire des petites applis simples, puis augmenter le niveau petit à petit... restait un problème de taille, je suis plus C++ que Java... mais après tout... je fais donc fi de tout ça et me replonge un peu dans Java, glanant des infos par ci par là sur le fonctionnement du SDK d'android...

Et aujourd'hui premier cap franchi, j'ai crée ma première appli (minimaliste certes)

C'est une clin d'oeil à une autre de mes activités "l'Airsoft"

NOM : AAC : Android Airsoft Converter

VERSION ACTUELLE : 1.0.1

SITE WEB : Cliquez-la

COMPATIBILITÉ : 1.5, 1.6, 2.1 (Testé)

DESCRIPTIF :

Petit gadget pour effectuer facilement et sans se prendre la tête les conversion "usuelles" pour la pratique de l'airsoft, cette application est dédiée aux gens qui n'aiment pas, ou son mauvais en calcul, qui ne se souviennent pas des formules de conversion, qui n'ont pas forcement un papier et un stylo sur eux pour les faire, ou bien qui sont tout simplement un peu fainéants et préfèrent une méthode simple et rapide.

SUIVI DU DÉVELOPPEMENT :

01/05/2010 : Sortie de la version initiale (v1.0)

04/05/2010 : Sortie de la version 1.0.1

- Réorganisation du code pour le rendre plus clair et maintenable.

- Transfert de toutes les chaines de caractères dans le fichier "strings.xml".

- Correction d'erreur de formulation pour certains textes.

- Ajout des conversions m/sec vers FPS et inversement.

- Fixation de l'utilisation de l'application en mode "portrait".

- Correction d'un bug : (Clavier virtuel qui ne s'affichait pas automatiquement au focus sur un EditText).

PHOTOS :

.device01_t.jpg .device02_t.jpg .device03_t.jpg

.device04_t.jpg .device05_t.jpg .device06_t.jpg

VIDÉO VERSION 1.0.1 :

http://www.youtube.com/watch?v=TpvvKB5X_EQ

qrcode.png

Modifié par Davidou2a
Lien vers le commentaire
Partager sur d’autres sites

Airsofteur aussi je vais teste, en revanche je suis pas contre un petit QR Code pr DL

Edit :

Je l'ai téléchargé, sympa mais un ajout des fonctions FPS -> M/S et M/S -> FPS serrait utile, le M/s reste l'unité légale

Modifié par kartouche
Lien vers le commentaire
Partager sur d’autres sites

C'est envisagé ;) c'etait qu'un premier jet...

Je prends donc note... QR Code ajouté :)

Modifié par Davidou2a
Lien vers le commentaire
Partager sur d’autres sites

Salut, j'aurai bien voulu mettre quelques screeshoots, mais bizzarement j'arrive pas a faire reconnaitre mon LG GW620 à ma Gentoo

david@MyBox ~/Desktop/ANDROID/android-sdk-linux/tools $ adb devices
* daemon not running. starting it now *
* daemon started successfully *
List of devices attached 
????????????    no permissions

Donc forcement "ddms" marche pas... je cherche si je trouve je posterai des screens...

Lien vers le commentaire
Partager sur d’autres sites

Bah je compte mettre éventuellement les sources en totalité ou en partie en-ligne a titre éducatif, bon après comme je dis toujours chacun code de telle ou telle façon, personnellement j essai d être le plus "propre" possible ne pas faire de surplus inutile, néanmoins je suis pas parfait du tout ;)

Sinon j essai de rester fidèle a mes "conventions" de nommage, et ma façon de faire pour que l'ensemble soit cohérent un minimum et maintenable par la suite

Pour ma prochaine appli je pense faire un Widget avec les alertes GLSA (Alertes de sécurité) de GNU/Linux Gentoo...

Sinon je pense a un truc avec Google Maps mais comme je suis en API 3 sur mon tel je pourrai pas le tester sauf si j'arrive a faire du code compatible en ascendant... mais bon avant d'en parler va falloir bien reflechir ;)

Modifié par Davidou2a
Lien vers le commentaire
Partager sur d’autres sites

t'as complètement raison !

Aussi un truc important (et je vais devoir revoir entièrement mon code pour ça) dans le dév, l'optimisation et la non surcharge de la mémoire. Et utiliser des design pattern, ça simplifie vraiment un max :)

Rien que le singleton peut vraiment sauver la vie .... l'observateur me semble aussi très judicieux (par exemple actuellement je code moi même salement les actualisations d'interface alors que le design pattern observateur pourrait s'en charger tout seul) ... bref je m'en foutais un peu au début mais les performances de l'appli s'en ressentent vite quand tu fais n'importe quoi lol ....

En tout cas, je suis complètement d'accord avec toi sur les conventions de nommage et le code propre!! :D

Lien vers le commentaire
Partager sur d’autres sites

En general j'adopte une convention elle plais ou pas, mais j'y reste plus ou moins fidele...

Genre mes nom sont du genre MaClasse_TypeUnNomClair | FPS2Joules_EditTextUserTypeFPS par exemple... c'est clair et on a pas besoin de chercher 50ans perso je préfère ajouter le nom de la classe en prefixe pour pas me planter quand 2 classes se ressembles comme c est le cas dans mon appli...

Voila une partie de ce que j'ai fait (j'ai volontairement pas séparé les listeners des boutons des classes de "base"

Point d'entrée du programme la Classe AAC.java

package com.android.aac;

import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class AAC extends Activity 
{

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) 
   {    
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       /** Defs */
       Button AAC_BoutonLancer = (Button) findViewById(R.id.AAC_BoutonLancer);

       /** Launch */
       AAC_BoutonLancer.setOnClickListener(
               new View.OnClickListener() 
               {
                   @Override
                   public void onClick(View v) 
                   {
                       /** Sound Click */
                       MediaPlayer mp = MediaPlayer.create(AAC.this, R.raw.machine_gun);
                       mp.start();

                       /** Next Page -> */
                       Intent intent;
                       intent = new Intent(AAC.this, MenuAAC.class);
                       startActivity(intent);
                   }
               }
       );
   }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:layout_gravity="center_vertical">

       android:id="@+id/AAC_Logo" 
       android:layout_gravity="center_horizontal" 
       android:scaleType="fitXY" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:src="@drawable/airsoft">


       android:text="@string/AAC_BoutonLancer" 
       android:id="@+id/AAC_BoutonLancer" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:layout_width="fill_parent">


       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:id="@+id/AAC_TextCopyright" 
       android:text="@string/AAC_TextCopyright">


FPS2Joules.java

package com.android.aac;

import java.text.DecimalFormat;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class FPS2Joules extends Activity 
{
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) 
   {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.fps2joules);

       /** Defs */
       Button FPS2Joules_BoutonCalculer = (Button) findViewById(R.id.FPS2Joules_BoutonCalculer);

       /** OnClick To Calculate */
       FPS2Joules_BoutonCalculer.setOnClickListener(
               new View.OnClickListener() 
               {
                   @Override
                   public void onClick(View v) 
                   {
                       /** Defs */
                       EditText FPS2Joules_EditTextFPS = (EditText) findViewById(R.id.FPS2Joules_EditTextFPS);
                       EditText FPS2Joules_EditTextPoids = (EditText) findViewById(R.id.FPS2Joules_EditTextPoids);
                       TextView FPS2JoulesTextViewResultat = (TextView) findViewById(R.id.FPS2JoulesTextViewResultat);
                       DecimalFormat FPS2JoulesDecimalFormat = new DecimalFormat("########.00");
                       String FPS2Joules_StringFPS = FPS2Joules_EditTextFPS.getText().toString();
                       String FPS2Joules_StringPoids = FPS2Joules_EditTextPoids.getText().toString();
                       double FPS2Joules_DoubleFPS = Double.valueOf(FPS2Joules_StringFPS) * 0.3048;
                       double FPS2Joules_DoublePoids = Double.valueOf(FPS2Joules_StringPoids) / 1000;
                       double FPS2Joules_DoubleResultat = 0.5 * FPS2Joules_DoublePoids * FPS2Joules_DoubleFPS * FPS2Joules_DoubleFPS;
                       /** Def a String with the value of "FPS2Joules_DoubleResultat" convert in String for the TextView  */
                       String FPS2Joules_ResultAlertString = getResources().getString(R.string.FPS2Joules_AlertString, String.valueOf(FPS2JoulesDecimalFormat.format(FPS2Joules_DoubleResultat)));
                       String FPS2Joules_ResultValidString = getResources().getString(R.string.FPS2Joules_ValidString, String.valueOf(FPS2JoulesDecimalFormat.format(FPS2Joules_DoubleResultat)));
                       String FPS2Joules_ResultValidStringMinusZero = getResources().getString(R.string.FPS2Joules_ValidStringMinusZero, String.valueOf(FPS2JoulesDecimalFormat.format(FPS2Joules_DoubleResultat)));

                       /** Sound Click */
                        MediaPlayer mp = MediaPlayer.create(FPS2Joules.this, R.raw.gunshot);
                       mp.start();

                       /** Conditions */
                       if(FPS2Joules_DoubleResultat > 2.0)
                       {
                           /** Sound Alert */
                           MediaPlayer mp1 = MediaPlayer.create(FPS2Joules.this, R.raw.alert);
                           mp1.start();

                           /** Show Results */
                           FPS2JoulesTextViewResultat.setText(FPS2Joules_ResultAlertString);
                       }
                       else
                       {
                           /** Workaround for the number with 0.45 for example */
                           if(FPS2Joules_DoubleResultat < 1.0)
                           {
                               /** Show Results */
                               FPS2JoulesTextViewResultat.setText(FPS2Joules_ResultValidStringMinusZero);
                           }
                           else
                           {
                               /** Show Results */
                               FPS2JoulesTextViewResultat.setText(FPS2Joules_ResultValidString);
                           }
                       }
                   }
               }
       );
   }
}

fps2joules.xml

<?xml version="1.0" encoding="utf-8"?>
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="#fff">

       android:id="@+id/FPS2Joules_ImageWarning" 
       android:src="@drawable/warning"
       android:layout_gravity="center_horizontal" 
       android:scaleType="fitXY" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content"> 


       android:id="@+id/FPS2Joules_LLayout_01" 
       android:orientation="horizontal" 
       android:layout_gravity="center_horizontal" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content">

           android:id="@+id/FPS2Joules_LLayout_02" 
           android:orientation="vertical" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:paddingLeft="10px">
               android:id="@+id/FPS2Joules_TextViewAskFPS" 
               android:layout_width="fill_parent" 
               android:layout_height="fill_parent" 
               android:textColor="#000" 
               android:padding="10px" 
               android:text="@string/AskTextViewFPS">

               android:id="@+id/FPS2Joules_TextViewAskPoids" 
               android:layout_width="fill_parent" 
               android:layout_height="fill_parent" 
               android:textColor="#000" 
               android:paddingLeft="10px" 
               android:paddingTop="22px" 
               android:text="@string/AskTextViewPoids">



           android:id="@+id/FPS2Joules_LLayout_03" 
           android:orientation="vertical" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:paddingRight="10px" 
           android:layout_weight="2">    
               android:id="@+id/FPS2Joules_EditTextFPS" 
               android:layout_width="fill_parent" 
               android:layout_height="fill_parent" 
               android:inputType="numberDecimal"                
               android:lines="1" 
               android:maxLines="1" 
               android:textColor="#000" 
               android:minWidth="100px"> 

               android:id="@+id/FPS2Joules_EditTextPoids" 
               android:layout_width="fill_parent" 
               android:layout_height="fill_parent" 
               android:inputType="numberDecimal"
               android:lines="1" 
               android:maxLines="1" 
               android:textColor="#000" 
               android:minWidth="100px">





       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="15px" 
       android:id="@+id/FPS2Joules_BoutonCalculer" 
       android:text="@string/ALL_BoutonCalculer" 
       android:padding="20px"> 


       android:text="" 
       android:id="@+id/FPS2JoulesTextViewResultat" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal" 
       android:paddingLeft="10px" 
       android:paddingRight="10px" 
       android:paddingTop="10px" android:textColor="#f00">



Voila en gros comment j ai concu le bouzin... j'ai pas tout mis mais bon c est juste pour en parler et puis toutes remarques peut etre que benefique, surtout que je suis pas tres tres java...

D'ailleurs on le vois j'indente façon C pas facon java ;)

Modifié par Davidou2a
Lien vers le commentaire
Partager sur d’autres sites

Ahah ça sent l'habitude de la casse de téléphone ;) j'ai cassé des tas de choses en partie cependant jamais le telephone :) bien que ce dernier en general souffre avec moi... il est meme tombé en mer du bateau... si si :o

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...