IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Faire une animation XML dans un jeu


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Par défaut Faire une animation XML dans un jeu
    Bonjour,
    Je suis en train de développer un jeu pour apprendre à programmer sur android. J'avance pas trop mal mais cela fait 3 jours que je suis bloqué pour faire une animation.

    Je fais le jeux de la bouteille et j'aimerai que lorsque ma bouteille cesse de tournée, une étiquette avec un choix "action ou vérité" descende du haut de l'écran pour s'afficher au dessus de ma bouteille.

    J'ai déjà remarqué que j'ai un pointeur null sur mon imageView mais je ne comprend pas car je n'ai ni warning ni erreur.

    voici tous mon code:

    MainActivity.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    package com.example.spinthebottle;
     
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
     
    public class MainActivity extends Activity 
    {
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) 
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	}
     
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) 
    	{
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.main, menu);
    		return true;
    	}
     
    }
    BottleView.java l’animation démarre ligne 244
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    package com.example.spinthebottle;
     
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.os.SystemClock;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.animation.Animation;
    import android.view.animation.Animation.AnimationListener;
    import android.view.animation.AnimationUtils;
    import android.widget.ImageView;
     
    public class BottleView extends View implements AnimationListener
    {
    	// Délais entre chaque image
    	private final int DELAY = 20;
    	// Durée de l'animation (ms)
    	private final int DURATION = 1000;
     
    	// Angle de départ de l'animation
    	private float startOrientation;
    	// Angle de fin de l'animation
    	private float endOrientation;
    	// Heure de début de l'animation (ms)
    	private long startTime;
     
    	// Image de la bouteille
    	Bitmap mBitmap;
    	private Paint bouteillePaint;
     
    	// Position X et Y pour afficher l'image au milieux du canvas
    	private float canvasCenterX;
    	private float canvasCenterY;
     
    	// Positions X et Y du centre de la bouteille utilisées pour le centre de rotation
    	private int centerX;
    	private int centerY;
     
    	// Position de la nouvelle origine du repère cartésien qui sert à calculer l'angle de rotation
    	private float newX, newY;
     
    	// Angle représentant l'orientation de la bouteille;
    	private float orientation=0;
    	// Angle de rotation à effectuer
    	private int angle=0;
     
    	// Première position X et Y en fonction du repère de base (0,0) en haut à gauche
    	private int firstX;
    	private int firstY;
    	private float t0 = 0;
     
     
    	// Position X et Y quand on bouge en fonction du repère de base (0,0) en haut à gauche
    	private int curentX;
    	private int curentY;
     
    	// Dernière position X et Y en fonction du repère de base (0,0) en haut à gauche
    	private int lastX;
    	private int lastY;
    	private float t1 = 0;
     
    	// Image et animation de l'étiquette
    	private ImageView etiquetteimg = null;
    	private Animation etiquetteAnimation = null;
     
    	//~--- constructors -------------------------------------------------------
    	public BottleView( Context context ) 
    	{
    		super( context );
     
    		// Chargement du BitMap original (149 x 528 px)
    		mBitmap = BitmapFactory.decodeResource( getResources(), R.drawable.bouteille );
     
    		// Chargement de l'image à annimer
    		etiquetteimg = (ImageView)findViewById( R.id.imageViewEtiquette );
    		assert etiquetteimg != null : Log.d( "debug", " etiquetteimg pointeur null" );
    		// Chargement de l'animation
    		etiquetteAnimation = AnimationUtils.loadAnimation( context, R.anim.etiquette );
    		assert etiquetteAnimation != null : Log.d( "debug", " etiquetteAnimation pointer null" );
     
    		// Activation keypad
    		this.setFocusable( true );
    		this.requestFocus();
    		// Activation du touch mode
    		this.setFocusableInTouchMode( true );
    		// Initialisation de la vue
    		initView();
    	}
     
    	// Constructeur utilisé pour instancier la vue depuis sa
    	// déclaration dans un fichier XML
    	public BottleView( Context context, AttributeSet attrs ) 
    	{
    		super( context, attrs );
     
    		// Chargement du BitMap original (149 x 528 px)
    		mBitmap = BitmapFactory.decodeResource( getResources(), R.drawable.bouteille );  
     
    		// Chargement de l'image à annimer
    		etiquetteimg = (ImageView)findViewById(R.id.imageViewEtiquette);
    		assert etiquetteimg != null : Log.d("debug", " etiquetteimg pointeur null");
    		// Chargement de l'animation
    		etiquetteAnimation = AnimationUtils.loadAnimation(context, R.anim.etiquette);
    		assert etiquetteAnimation != null : Log.d("debug", " etiquetteAnimation pointer null");
     
    		// Activation keypad
    		this.setFocusable( true );
    		this.requestFocus();
    		// Activation du touch mode
    		this.setFocusableInTouchMode( true );
    		// Initialisation de la vue
    		initView();
    	}
     
    	//~--- get methods --------------------------------------------------------
     
    	// permet de récupérer l'orientation de la bouteille
    	public float getOrientation() 
    	{
    		return orientation;
    	}
     
    	//~--- set methods --------------------------------------------------------  
     
    	// permet de changer l'orientation de la boussole
    	public void setOrientation( float rotation ) 
    	{
    		// on met à jour l'orientation uniquement si elle a changé
    		if ( rotation != this.orientation ) 
    		{
    			// Arrêter l'ancienne animation
    			removeCallbacks(animationTask);
    			// Position courante
    			this.startOrientation = this.orientation;
    			// Position désirée
    			this.endOrientation = rotation;
     
    			// Détermination du sens de rotation de la bouteille
    			if ( ( ( startOrientation + 180 ) % 360 ) > endOrientation )
    			{
    				// Rotation vers la gauche
    				if ( ( startOrientation - endOrientation ) > 180 )
    				{
    					endOrientation += 360;
    				}
    			} 
    			else 
    			{
    				// Rotation vers la droite
    				if ( ( endOrientation - startOrientation ) > 180 )
    				{
    					startOrientation += 360;
    				}
    			}
     
    			//Nouvelle animation
    			startTime = SystemClock.uptimeMillis();
    			postDelayed( animationTask, DELAY );
    		}
    	}
     
    	//~--- methods ------------------------------------------------------------
     
    	// Définir la taille de la vue
    	@Override
    	protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec ) 
    	{
    		int measuredWidth  = measure( widthMeasureSpec );
    		int measuredHeight = measure( heightMeasureSpec );
    		setMeasuredDimension( measuredWidth, measuredHeight );
    	}
     
    	// Déterminer la taille de notre vue
    	private int measure( int measureSpec ) 
    	{
    		int result   = 0;
    		int specMode = MeasureSpec.getMode( measureSpec );
    		int specSize = MeasureSpec.getSize( measureSpec );
     
    		if ( specMode == MeasureSpec.UNSPECIFIED ) 
    		{
    			// Le parent ne nous a pas donné d'indications,
    			// on fixe donc une taille
    			result = 150;
    		} 
    		else 
    		{
    			// On va prendre la taille de la vue parente
    			result = specSize;
    		}
     
    		return result;
    	}
     
    	// Initialise les pinceaux
    	private void initView() 
    	{
    		bouteillePaint = new Paint();
    	}
     
    	// Appelée pour redessiner la vue
    	@Override
    	protected void onDraw( Canvas canvas ) 
    	{
    		// On détermine le centre de lécran
    		canvasCenterX = ( canvas.getWidth() - mBitmap.getWidth() ) / 2;
    		canvasCenterY = ( canvas.getHeight() - mBitmap.getHeight() ) / 2;
     
    		//On détermine le point au centre de notre image (bouteille)
    		centerX = (int) ( canvasCenterX + ( mBitmap.getWidth() / 2 ) );
    		centerY = (int) ( canvasCenterY + ( mBitmap.getHeight() / 2 ) );
     
    		// On sauvegarde la position initiale du canevas
    		canvas.save();
     
    		// On tourne le canevas pour que la bouteille pointe vers le haut
    		canvas.rotate( orientation, centerX, centerY);
    		// On dessine la bouteille au centre du canvas
    		canvas.drawBitmap( mBitmap, canvasCenterX, canvasCenterY, bouteillePaint );
     
    		// On restaure la position initiale (inutile ici mais prévoyant)
    		canvas.restore();
     
    	}
     
    	// Gestion de l'animation de rotation de la bouteille
    	private Runnable animationTask = new Runnable() 
    	{
    		public void run() 
    		{
    			long curTime   = SystemClock.uptimeMillis();	// Temps courant
    			long totalTime = curTime - startTime;			// Temps passé
     
    			if ( totalTime > DURATION )	// Si le temps écoulé est superrieur à la limite maximale
    			{
    				// Fin de l'animation
    				orientation = endOrientation;
    				// On lance l'animation de l'etiquette
    				etiquetteimg.startAnimation(etiquetteAnimation);
    				// On met fin à l'animation
    				removeCallbacks( animationTask );
    			} 
    			else 
    			{
    				//Changer la position de la bouteille
    				float perCent = ( (float) totalTime ) / DURATION; // Pourcentatge de l'avancement de l'animation
    				// Animation plus réaliste de la bouteille (accélération au début et décélération à la fin)
    				perCent = (float) Math.sin( perCent * 1.5 );
    				//On s'assure qu'on ne dépassera pas 1
    				perCent = Math.min( perCent, 1 );
    				//On determine la nouvelle orientation de la bouteille
    				orientation = (float) ( startOrientation + ( perCent * ( endOrientation - startOrientation ) ) );
    				//Rappeler cette tâche dans DELAY ms pour dessiner la suite
    				postDelayed(this, DELAY);
    			}
    			// Quoi qu'il arrive, on demande à la vue de se redessiner
    			optimizedInvalidate();
    		}
    	};
     
    	// Touch-input handler
    	@Override
    	public boolean onTouchEvent(MotionEvent event) 
    	{ 
    		int nombrePosition = 0;
    		switch ( event.getAction() ) 
    		{
    			case MotionEvent.ACTION_DOWN:
    				t0 = SystemClock.uptimeMillis();
     				firstX = (int) event.getX();
     				firstY = (int) event.getY();
     			case MotionEvent.ACTION_MOVE:
     				nombrePosition++;
     				if( nombrePosition % 10 == 1)
     				{
       	 				curentX = (int) event.getX();
       	 				curentY = (int) event.getY();
       	 				this.setOrientation( mesureRotation( curentX, curentY ) );	
     				}
     				break;
     			case MotionEvent.ACTION_UP:
     				t1 = SystemClock.uptimeMillis();
     				lastX = (int) event.getX();
     				lastY = (int) event.getY();
     				angle = (int) mesureFinalRotation( mesureRotation( firstX, firstY ), mesureRotation( lastX, lastY ), ( t1 - t0 ) );
     				this.setOrientation( angle );
     				return true;
    		}
     
    		return true;  // Event handled
    	}
     
    	// Mesure l'angle de rotation
    	public int mesureRotation( int x, int y )
    	{
    		float adjacent, hypotenuse;
     
    		// On change le repère pour s'adapter au centre de rotation.
    		newX = x - centerX;
    		newY = centerY - y;
    		// Mesure du coté adjacent
    		adjacent = newY;
    		// Mesure de l'hypotenuse
    		hypotenuse = (float) Math.sqrt( Math.pow( newX, 2 ) + Math.pow( newY, 2 ) );
    		// On calcule l'angle
    		if( newX >= 0 )
    		{
    			angle = (int) ( Math.acos( adjacent / hypotenuse ) * 57.3 ); // conversion des radiants en degré.
    		}
    		else
    		{
    			angle = (int) ((float) ( Math.acos( -adjacent / hypotenuse ) * 57.3 ) + 180); // conversion des radiants en degré.
    		}
     
    		return angle;
    	}
     
    	// Mesure l'angle final à faire pour l'animation
    	public int mesureFinalRotation( int firstAngle, int lastAngle, float duration)
    	{
    		int vAngulaire = 0; // vitesse angulaire
     
    		duration /= 1000; // On met le temps en seconde
     
    		if( firstAngle == lastAngle )
    		{
    			angle = firstAngle;
    			Log.d("debug" ," angle final = " + firstAngle + " duration = " + duration );
    		}
    		else if( firstAngle > lastAngle )
    		{
    			vAngulaire = (int) ( ( firstAngle - lastAngle ) / duration );
    			angle = vAngulaire * 2;			
    			Log.d("debug" ," angle final = " + angle + " angle = " + ( firstAngle - lastAngle ) + " vAngulaire = " + vAngulaire + " duration = " + duration );
    		}
    		else
    		{
    			vAngulaire = (int) ( ( lastAngle - firstAngle ) / duration );
    			angle = vAngulaire * 2;
    			Log.d("debug" ," angle final = " + angle + " angle = " + ( lastAngle - firstAngle ) + " vAngulaire = " + vAngulaire + " duration = " + duration );
    		}
     
    		return angle;
    	}
     
    	// Optimisation de Invalidate()
    	private void optimizedInvalidate()
    	{   
    		final int mBitmapHeight = mBitmap.getHeight();
    		// On trouve les coordonnées du point supérieur gauche de la zone à invalider
    		final int x1 = centerX - ( mBitmapHeight / 2 );
    		final int y1 = centerY - ( mBitmapHeight / 2 );
    		// On trouve les coordonnées du point inférieur droit de la zone à
    		final int x2 = centerX + ( mBitmapHeight / 2 );
    		final int y2 = centerY + ( mBitmapHeight / 2 );
    		// Invalide la vue en utilisant invalidate(int, int, int, int)
    		invalidate(x1, y1, x2, y2);
    	}
     
    	@Override
    	public void onAnimationStart( Animation animation ) 
    	{
    		etiquetteimg.setVisibility(View.VISIBLE);
     
    	}
     
    	@Override
    	public void onAnimationEnd( Animation animation ) 
    	{
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void onAnimationRepeat( Animation animation ) 
    	{
    		// TODO Auto-generated method stub
     
    	}
     
    }
    res/anim/etiquette.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:fillAfter="true">
     
        <scale
            android:duration="500"
            android:fromXScale="1.0"
            android:fromYScale="0.0"
            android:interpolator="@android:anim/linear_interpolator"
            android:toXScale="1.0"
            android:toYScale="1.0" />
     
    </set>

    res/layout/activity_main.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:background="@drawable/bois"
        tools:context=".MainActivity" >
     
        <LinearLayout
    		android:id="@+id/linearLayout1"
    		android:layout_width="match_parent"
    		android:layout_height="match_parent"
    		android:gravity="center_vertical"
    		android:orientation="vertical" >
     
    		 <com.example.spinthebottle.BottleView
    			xmlns:android="http://schemas.android.com/apk/res/android"	
    			android:id="@+id/bottleView"	
    			android:layout_width="fill_parent"
    			android:layout_height="fill_parent"
    			android:contentDescription="@string/jeux_description"/>     
     
        </LinearLayout>
     
        <ImageView
    		android:id="@+id/imageViewEtiquette"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:layout_alignParentBottom="true"
    		android:layout_alignParentLeft="true"
    		android:layout_alignParentRight="true"
    		android:layout_alignParentTop="true"
    		android:contentDescription="@string/etiquette_description"
    		android:src="@drawable/etiquette"
    		android:visibility="invisible" />
     
    </RelativeLayout>
    Quelqu'un aurait-il un indice ou un début de solutions ?
    Merci.

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Tu pourrais nous montrer ton logcat ?

    Merci.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Par défaut
    Voila les logs

    Avant de faire tourner la bouteille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    10-26 18:16:05.621: D/AndroidRuntime(977): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
    10-26 18:16:05.621: D/AndroidRuntime(977): CheckJNI is ON
    10-26 18:16:05.641: D/dalvikvm(977): Trying to load lib libjavacore.so 0x0
    10-26 18:16:05.651: D/dalvikvm(977): Added shared lib libjavacore.so 0x0
    10-26 18:16:05.671: D/dalvikvm(977): Trying to load lib libnativehelper.so 0x0
    10-26 18:16:05.671: D/dalvikvm(977): Added shared lib libnativehelper.so 0x0
    10-26 18:16:06.162: D/AndroidRuntime(977): Calling main entry com.android.commands.pm.Pm
    10-26 18:16:06.212: I/ActivityManager(295): Start proc com.android.defcontainer for service com.android.defcontainer/.DefaultContainerService: pid=988 uid=10009 gids={50009, 1015, 2001, 1028}
    10-26 18:16:06.262: E/Trace(988): error opening trace file: No such file or directory (2)
    10-26 18:16:06.312: W/ActivityManager(295): No content provider found for permission revoke: file:///data/local/tmp/SpinTheBottle.apk
    10-26 18:16:06.452: W/ActivityManager(295): No content provider found for permission revoke: file:///data/local/tmp/SpinTheBottle.apk
    10-26 18:16:06.452: I/PackageManager(295): Copying native libraries to /data/app-lib/vmdl2039924844
    10-26 18:16:06.531: I/ActivityManager(295): Process com.android.deskclock (pid 809) has died.
    10-26 18:16:06.751: I/PackageManager(295): Removing non-system package:com.example.spinthebottle
    10-26 18:16:06.751: I/ActivityManager(295): Force stopping package com.example.spinthebottle appid=10048 user=-1
    10-26 18:16:06.771: I/ActivityManager(295): Killing proc 790:com.example.spinthebottle/u0a10048: force stop com.example.spinthebottle
    10-26 18:16:06.771: W/ActivityManager(295): Force removing ActivityRecord{40f076e8 u0 com.example.spinthebottle/.MainActivity}: app died, no saved state
    10-26 18:16:06.881: I/WindowState(295): WIN DEATH: Window{410a5d00 u0 com.example.spinthebottle/com.example.spinthebottle.MainActivity}
    10-26 18:16:06.981: I/PackageManager(295): Package com.example.spinthebottle codePath changed from /data/app/com.example.spinthebottle-2.apk to /data/app/com.example.spinthebottle-1.apk; Retaining data and using new
    10-26 18:16:07.071: E/SurfaceFlinger(36): ro.sf.lcd_density must be defined as a build property
    10-26 18:16:07.134: W/EGL_emulation(411): eglSurfaceAttrib not implemented
    10-26 18:16:07.151: W/InputMethodManagerService(295): Got RemoteException sending setActive(false) notification to pid 790 uid 10048
    10-26 18:16:07.236: I/PackageManager(295): Running dexopt on: com.example.spinthebottle
    10-26 18:16:08.351: D/dalvikvm(1003): DexOpt: load 272ms, verify+opt 447ms, 936572 bytes
    10-26 18:16:08.381: W/PackageManager(295): Code path for pkg : com.example.spinthebottle changing from /data/app/com.example.spinthebottle-2.apk to /data/app/com.example.spinthebottle-1.apk
    10-26 18:16:08.381: W/PackageManager(295): Resource path for pkg : com.example.spinthebottle changing from /data/app/com.example.spinthebottle-2.apk to /data/app/com.example.spinthebottle-1.apk
    10-26 18:16:08.394: I/ActivityManager(295): Force stopping package com.example.spinthebottle appid=10048 user=-1
    10-26 18:16:08.441: D/PackageManager(295): New package installed in /data/app/com.example.spinthebottle-1.apk
    10-26 18:16:08.712: D/dalvikvm(295): GC_CONCURRENT freed 1128K, 27% free 6843K/9284K, paused 72ms+82ms, total 208ms
    10-26 18:16:08.722: I/ActivityManager(295): Force stopping package com.example.spinthebottle appid=10048 user=0
    10-26 18:16:08.782: D/dalvikvm(411): GC_EXPLICIT freed 1397K, 20% free 7019K/8676K, paused 2ms+4ms, total 51ms
    10-26 18:16:08.852: I/InputReader(295): Reconfiguring input devices.  changes=0x00000010
    10-26 18:16:08.863: I/ActivityManager(295): Start proc com.android.keychain for broadcast com.android.keychain/.KeyChainBroadcastReceiver: pid=1004 uid=1000 gids={41000, 1015, 1028, 3002, 3001, 3003}
    10-26 18:16:09.002: E/Trace(1004): error opening trace file: No such file or directory (2)
    10-26 18:16:09.072: I/InputReader(295): Reconfiguring input devices.  changes=0x00000010
    10-26 18:16:09.153: W/ContextImpl(1004): Calling a method in the system process without a qualified user: android.app.ContextImpl.startService:1352 android.content.ContextWrapper.startService:450 android.content.ContextWrapper.startService:450 com.android.keychain.KeyChainBroadcastReceiver.onReceive:12 android.app.ActivityThread.handleReceiver:2376 
    10-26 18:16:09.224: I/ActivityManager(295): Start proc android.process.acore for broadcast com.android.providers.contacts/.PackageIntentReceiver: pid=1017 uid=10004 gids={50004, 3003, 1015, 1028}
    10-26 18:16:09.351: E/Trace(1017): error opening trace file: No such file or directory (2)
    10-26 18:16:09.391: W/InputMethodManagerService(295): Found no subtypes in a system IME: com.android.inputmethod.pinyin
    10-26 18:16:09.671: D/dalvikvm(1017): GC_CONCURRENT freed 207K, 12% free 2605K/2928K, paused 5ms+2ms, total 79ms
    10-26 18:16:09.681: I/ActivityManager(295): Start proc com.svox.pico for broadcast com.svox.pico/.VoiceDataInstallerReceiver: pid=1035 uid=10014 gids={50014, 1015, 1028}
    10-26 18:16:09.751: E/Trace(1035): error opening trace file: No such file or directory (2)
    10-26 18:16:10.001: D/dalvikvm(295): GC_EXPLICIT freed 522K, 28% free 6765K/9284K, paused 88ms+27ms, total 444ms
    10-26 18:16:10.041: D/AndroidRuntime(977): Shutting down VM
    10-26 18:16:10.061: D/dalvikvm(977): GC_CONCURRENT freed 94K, 18% free 467K/564K, paused 0ms+0ms, total 7ms
    10-26 18:16:10.061: D/dalvikvm(977): Debugger has detached; object registry had 1 entries
    10-26 18:16:10.172: I/ActivityManager(295): Start proc com.android.quicksearchbox for broadcast com.android.quicksearchbox/.CorporaUpdateReceiver: pid=1048 uid=10001 gids={50001, 3003, 1028}
    10-26 18:16:10.262: E/Trace(1048): error opening trace file: No such file or directory (2)
    10-26 18:16:10.771: D/AndroidRuntime(1067): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
    10-26 18:16:10.771: W/RecognitionManagerService(295): no available voice recognition services found for user 0
    10-26 18:16:10.781: D/AndroidRuntime(1067): CheckJNI is ON
    10-26 18:16:10.834: D/dalvikvm(1067): Trying to load lib libjavacore.so 0x0
    10-26 18:16:10.852: D/dalvikvm(1067): Added shared lib libjavacore.so 0x0
    10-26 18:16:10.901: D/dalvikvm(1067): Trying to load lib libnativehelper.so 0x0
    10-26 18:16:10.901: D/dalvikvm(1067): Added shared lib libnativehelper.so 0x0
    10-26 18:16:11.672: D/AndroidRuntime(1067): Calling main entry com.android.commands.am.Am
    10-26 18:16:11.682: D/dalvikvm(1067): Note: class Landroid/app/ActivityManagerNative; has 157 unimplemented (abstract) methods
    10-26 18:16:11.702: I/ActivityManager(295): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.spinthebottle/.MainActivity} from pid 1067
    10-26 18:16:11.802: D/AndroidRuntime(1067): Shutting down VM
    10-26 18:16:11.812: D/dalvikvm(1067): GC_CONCURRENT freed 95K, 17% free 499K/596K, paused 1ms+0ms, total 8ms
    10-26 18:16:11.812: D/jdwp(1067): Got wake-up signal, bailing out of select
    10-26 18:16:11.812: D/dalvikvm(1067): Debugger has detached; object registry had 1 entries
    10-26 18:16:11.833: D/dalvikvm(1078): Not late-enabling CheckJNI (already on)
    10-26 18:16:11.852: I/ActivityManager(295): Start proc com.example.spinthebottle for activity com.example.spinthebottle/.MainActivity: pid=1078 uid=10048 gids={50048, 1028}
    10-26 18:16:12.042: E/Trace(1078): error opening trace file: No such file or directory (2)
    10-26 18:16:12.042: E/SurfaceFlinger(36): ro.sf.lcd_density must be defined as a build property
    10-26 18:16:12.431: D/dalvikvm(1078): GC_FOR_ALLOC freed 64K, 7% free 2556K/2740K, paused 68ms, total 69ms
    10-26 18:16:12.482: I/dalvikvm-heap(1078): Grow heap (frag case) to 5.526MB for 3059592-byte allocation
    10-26 18:16:12.561: D/dalvikvm(1078): GC_FOR_ALLOC freed 2K, 4% free 5542K/5728K, paused 75ms, total 75ms
    10-26 18:16:12.602: D/dalvikvm(1078): GC_CONCURRENT freed 0K, 4% free 5542K/5728K, paused 4ms+24ms, total 43ms
    10-26 18:16:12.752: D/dalvikvm(1078): GC_FOR_ALLOC freed <1K, 4% free 5541K/5728K, paused 16ms, total 17ms
    10-26 18:16:12.771: I/dalvikvm-heap(1078): Grow heap (frag case) to 10.711MB for 5439516-byte allocation
    10-26 18:16:12.871: D/dalvikvm(1078): GC_FOR_ALLOC freed <1K, 2% free 10853K/11044K, paused 93ms, total 93ms
    10-26 18:16:12.912: D/dalvikvm(1078): GC_CONCURRENT freed 0K, 2% free 10853K/11044K, paused 4ms+4ms, total 32ms
    10-26 18:16:13.072: D/dalvikvm(1078): GC_FOR_ALLOC freed 3297K, 30% free 8421K/11900K, paused 20ms, total 22ms
    10-26 18:16:13.102: I/ActivityManager(295): Process com.android.calendar (pid 824) has died.
    10-26 18:16:13.132: I/ActivityManager(295): Process com.android.providers.calendar (pid 842) has died.
    10-26 18:16:13.142: I/dalvikvm-heap(1078): Grow heap (frag case) to 16.246MB for 8294416-byte allocation
    10-26 18:16:13.262: D/dalvikvm(1078): GC_CONCURRENT freed <1K, 18% free 16520K/20004K, paused 71ms+4ms, total 113ms
    10-26 18:16:13.981: D/dalvikvm(1078): GC_FOR_ALLOC freed <1K, 18% free 16520K/20004K, paused 25ms, total 25ms
    10-26 18:16:14.141: I/ActivityManager(295): Process com.android.keychain (pid 1004) has died.
    10-26 18:16:14.301: I/ActivityManager(295): Process com.svox.pico (pid 1035) has died.
    10-26 18:16:14.463: I/ActivityManager(295): Process android.process.acore (pid 1017) has died.
    10-26 18:16:14.492: I/dalvikvm-heap(1078): Grow heap (frag case) to 30.307MB for 14745616-byte allocation
    10-26 18:16:14.632: D/dalvikvm(1078): GC_CONCURRENT freed 0K, 11% free 30920K/34408K, paused 70ms+5ms, total 121ms
    10-26 18:16:15.031: E/SurfaceFlinger(36): ro.sf.lcd_density must be defined as a build property
    10-26 18:16:15.041: D/libEGL(1078): loaded /system/lib/egl/libEGL_emulation.so
    10-26 18:16:15.051: D/(1078): HostConnection::get() New Host Connection established 0x2a1602e8, tid 1078
    10-26 18:16:15.124: D/libEGL(1078): loaded /system/lib/egl/libGLESv1_CM_emulation.so
    10-26 18:16:15.131: D/libEGL(1078): loaded /system/lib/egl/libGLESv2_emulation.so
    10-26 18:16:15.242: W/EGL_emulation(1078): eglSurfaceAttrib not implemented
    10-26 18:16:15.251: D/OpenGLRenderer(1078): Enabling debug mode 0
    10-26 18:16:15.902: I/ActivityManager(295): Displayed com.example.spinthebottle/.MainActivity: +4s102ms
    Après avoir fait tourner la bouteille le programme plante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    10-26 18:19:04.691: D/debug(1078):  angle final = 58 duration = 0.075
    10-26 18:19:05.715: D/AndroidRuntime(1078): Shutting down VM
    10-26 18:19:05.715: W/dalvikvm(1078): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
    10-26 18:19:05.733: E/AndroidRuntime(1078): FATAL EXCEPTION: main
    10-26 18:19:05.733: E/AndroidRuntime(1078): java.lang.NullPointerException
    10-26 18:19:05.733: E/AndroidRuntime(1078): 	at com.example.spinthebottle.BottleView$1.run(BottleView.java:244)
    10-26 18:19:05.733: E/AndroidRuntime(1078): 	at android.os.Handler.handleCallback(Handler.java:725)
    10-26 18:19:05.733: E/AndroidRuntime(1078): 	at android.os.Handler.dispatchMessage(Handler.java:92)
    10-26 18:19:05.733: E/AndroidRuntime(1078): 	at android.os.Looper.loop(Looper.java:137)
    10-26 18:19:05.733: E/AndroidRuntime(1078): 	at android.app.ActivityThread.main(ActivityThread.java:5041)
    10-26 18:19:05.733: E/AndroidRuntime(1078): 	at java.lang.reflect.Method.invokeNative(Native Method)
    10-26 18:19:05.733: E/AndroidRuntime(1078): 	at java.lang.reflect.Method.invoke(Method.java:511)
    10-26 18:19:05.733: E/AndroidRuntime(1078): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    10-26 18:19:05.733: E/AndroidRuntime(1078): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    10-26 18:19:05.733: E/AndroidRuntime(1078): 	at dalvik.system.NativeStart.main(Native Method)

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Ce sont ces deux lignes qui expliquent le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    10-26 18:19:05.733: E/AndroidRuntime(1078): java.lang.NullPointerException
    10-26 18:19:05.733: E/AndroidRuntime(1078): 	at com.example.spinthebottle.BottleView$1.run(BottleView.java:244)
    L'erreur vient de la ligne 244 de la classe BottleView.java
    Montres-nous ce code.

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Pour être précis...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    java.lang.NullPointerException
     	at com.example.spinthebottle.BottleView$1.run(BottleView.java:244)
    On a l'utilisation d'une référence nulle, ligne 244 du fichier BottleView.java
    Dans le fonction "run" d'une classe anonyme déclarée dans la classe com.example.spinthebottle.BottleView


    Oui je sais je chipotte

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Par défaut
    Citation Envoyé par Simon MARQUIS Voir le message
    Montres-nous ce code.
    c'est le code que j'ai mis au dessus. ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    	// Gestion de l'animation de rotation de la bouteille
    	private Runnable animationTask = new Runnable() 
    	{
    		public void run() 
    		{
    			long curTime   = SystemClock.uptimeMillis();	// Temps courant
    			long totalTime = curTime - startTime;			// Temps passé
     
    			if ( totalTime > DURATION )	// Si le temps écoulé est superrieur à la limite maximale
    			{
    				// Fin de l'animation
    				orientation = endOrientation;
    				// On lance l'animation de l'etiquette
    				etiquetteimg.startAnimation(etiquetteAnimation); //!!!! LIGNE 244
    				// On met fin à l'animation
    				removeCallbacks( animationTask );
    			} 
    			else 
    			{
    				//Changer la position de la bouteille
    				float perCent = ( (float) totalTime ) / DURATION; // Pourcentatge de l'avancement de l'animation
    				// Animation plus réaliste de la bouteille (accélération au début et décélération à la fin)
    				perCent = (float) Math.sin( perCent * 1.5 );
    				//On s'assure qu'on ne dépassera pas 1
    				perCent = Math.min( perCent, 1 );
    				//On determine la nouvelle orientation de la bouteille
    				orientation = (float) ( startOrientation + ( perCent * ( endOrientation - startOrientation ) ) );
    				//Rappeler cette tâche dans DELAY ms pour dessiner la suite
    				postDelayed(this, DELAY);
    			}
    			// Quoi qu'il arrive, on demande à la vue de se redessiner
    			optimizedInvalidate();
    		}
    	};

  7. #7
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Quelle est ta ligne 224 du fichier BottleView ?

    A vu de nez je dirais que etiquetteimg n'est pas initialisé ?

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    C'est même certain Feanorin

    etiquetteimg est null vu l'exception et le code ligne 244.

  9. #9
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    etiquetteimg est null vu l'exception et le code ligne 244.
    mon doigt a rippé sur le deux .

  10. #10
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Par défaut
    ok ça "etiquetteimg est null vu l'exception et le code ligne 244. " j'ai compris. Le problème est que :

    premièrement dans le constructeur j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		// Chargement de l'image à annimer
    		etiquetteimg = (ImageView)findViewById( R.id.imageViewEtiquette );
    		assert etiquetteimg != null : Log.d( "debug", " etiquetteimg pointeur null" );
    		// Chargement de l'animation
    		etiquetteAnimation = AnimationUtils.loadAnimation( context, R.anim.etiquette );
    		assert etiquetteAnimation != null : Log.d( "debug", " etiquetteAnimation pointer null" );
    et dans le logcat les asserts ne sautent pas. du coup etiquetteimg n'est pas null idem pour etiquetteAnimation .

    deuxièmement la ligne 244 est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etiquetteimg.startAnimation(etiquetteAnimation);

  11. #11
    Membre éprouvé
    Femme Profil pro
    Développeur Java
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Par défaut
    Alors j'ai envie de dire, si Grand Manitou t'écris en rouge que tu pointes sur null, c'est que.. tu pointes sur null Ton objet peut très bien ne pas être null à l'issu du constructeur et l'être au moment du run : et ce pour des raisons parfois obscures mais qui existent forcement

    Déjà descend bien ton log d'erreur jusqu'au bout, car si la première ligne te dit ou l'erreur émerge, l'origine peut être différente et dans ce cas tu la retrouves plus bas. (même si dans ton cas je vois pas trop comment)

    Cherche un peu dans la façon dont tu utilises ton animationTask ? Et aussi, ton BottleView, il est déclaré/instancié à quel endroit (pas trouvé ) et comment l'utilises tu? Bref à ta place je commencerais par faire une click-droit/"open call hierarchy " sur ton anime, ton étiquette, ton objet bottle et ton animationTask... souvent parfois c'est bête comme chou

  12. #12
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Par défaut
    Citation Envoyé par CrikTeCroque Voir le message
    Alors j'ai envie de dire, si Grand Manitou t'écris en rouge que tu pointes sur null, c'est que.. tu pointes sur null Ton objet peut très bien ne pas être null à l'issu du constructeur et l'être au moment du run : et ce pour des raisons parfois obscures mais qui existent forcement
    Comme tu le dis si bien, des raisons obscures qui sont la raison pour lesquelles je pose la question et que je suis un peu perdu

    Citation Envoyé par CrikTeCroque Voir le message
    Déjà descend bien ton log d'erreur jusqu'au bout
    C'est déjà le cas au dessus.


    Citation Envoyé par CrikTeCroque Voir le message
    ton BottleView, il est déclaré/instancié à quel endroit (pas trouvé ) et comment l'utilises tu?
    Il est instancié dans res/layout/activity_main.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		 <com.example.spinthebottle.BottleView
    			xmlns:android="http://schemas.android.com/apk/res/android"	
    			android:id="@+id/bottleView"	
    			android:layout_width="fill_parent"
    			android:layout_height="fill_parent"
    			android:contentDescription="@string/jeux_description"/>
    avec dans MainActivity.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	@Override
    	protected void onCreate(Bundle savedInstanceState) 
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	}

  13. #13
    Membre éprouvé
    Femme Profil pro
    Développeur Java
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Par défaut
    Oui au temps pour moi j'avais pas vu ton layout

    Bon déjà chez moi ton etiquetteView est bien nulle dans le constructeur. Ton assert ne marche pas, perso j'aime le bon vieux truc moche mais sûr , surtout pour faire du débug :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(etiquetteimg == null){
    	Log.i("DEBUUUUGGGG", " etiquetteimg pointeur null");
    }
    Tout pareillement je n'ai pas l'habitude d'instancier mes vues personnifiées dans le layout, mais pour moi voilà ce qu'il se passe :

    Tu fais ton set content view.
    Il commence à charger le layout et croise un constructeur de Bottleview.
    Dans ce constructeur il voit un appel à une id etiquetteView , qui renvoie à une ImageView qui.. n'existe pas! (puisque tu es 15 lignes avant sa création).

    Bon c'est dimanche, j'espère que j'ai étée assez claire

Discussions similaires

  1. [CS5] faire une fonction xml dans le flash ?
    Par Djwaves dans le forum Flash
    Réponses: 0
    Dernier message: 27/06/2011, 16h21
  2. Réponses: 2
    Dernier message: 03/01/2007, 11h23
  3. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24
  4. comment integer une animation swf dans une page
    Par naili dans le forum Intégration
    Réponses: 7
    Dernier message: 18/09/2002, 18h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo