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

Composants graphiques Android Discussion :

Affichage de webView en utilisant le scroll horizontal


Sujet :

Composants graphiques Android

  1. #1
    Invité
    Invité(e)
    Par défaut Affichage de webView en utilisant le scroll horizontal
    J'ai une appli qui affiche une WebView quand je lance, et j'ai un bouton dans mon menu qui me permet d'afficher une autre webview. Cepedant j'aimerais pouvoir passer d'une webview à une autre en utilisant la scrollbar. Quelque chose qui ressemble aux appli ebook permettant de lire des livres sur un smartphones, j'aimerais que le passage de l'une a l'autre de mes Webview ressemble au passage des pages du livre.

    Pour l'instant, je n'ai qu'une seule webview dans mon main.xml, et j'en change le contenu en appuyant sur le bouton de mon menu.

    dois-je mettre 2 webview dans mon xml? dans ce cas je risque d'afficher les deux en même temps, or ce n'est pas ce que je veux.

    Est-ce seulement possible ce que je souhaite faire?
    Si oui, quelles solutions existe-t-il? j'ai chercher sur le net mais je n'est pas trouver d'infos sur la "gestion" des webview avec une scrollbar.

    Si cela n'est pas possible, je pense que je passerais par des boutons qui me feront passer d'une webview à une autre, mais je trouve celà un peu moins intuitif.
    Dernière modification par Invité ; 29/06/2011 à 14h44.

  2. #2
    Invité
    Invité(e)
    Par défaut Scroll horizontal sur Android
    Je pense avoir trouvé un élèment de réponse ici, je vais testé et je fais un retour pour ceux que ça pourrait intérésser.

  3. #3
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Une classe existe dans l'API d'android
    ViewFlipper
    http://developer.android.com/referen...ewFlipper.html

    un exemple :
    http://developer.android.com/resourc...nimation2.html

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci pour les liens, ça semble effectivement correspondre à ce que j'ai besoin:
    Simple ViewAnimator that will animate between two or more views that have been added to it. Only one child is shown at a time. If requested, can automatically flip between each child at a regular interval.
    Par contre pour le lien que moi j'ai donné, je n'ai pas réussi à l'appliquer, j'ai des erreurs sur les lignes à rajouter dans le xml.
    Donc je vais plutôt essayer ta solution Feanorin merci =)

    ----EDIT----
    J'ai donc créé 2 webview qui s'affiche l'une à la suite de l'autre grâce au viewFlipper, mais je passe quand même par un bouton pour afficher la 2éme webview.
    J'ai cependant un problème quand je clique sur le bouton .. rien ne se passe, enfin plutôt je n'affiche pas ma 2éme webview. Je pense pourtant que mon code est correct :
    voici mon 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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:layout_width="fill_parent"
    	android:layout_height="fill_parent" android:orientation="vertical">
    	<Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="next"
            android:id="@+id/next"/>
    	<ViewFlipper 
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content"
    		android:id="@+id/flipper"/>
        <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview1"/>
        <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview2"/>
    </LinearLayout>
    et mon code 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
    26
    27
    28
    29
    30
    31
    32
    33
    public class GA extends Activity {
        /** Called when the activity is first created. */
    	WebView mWebView1;
    	WebView mWebView2;
    	ViewFlipper mFlipper;
    	private static final FrameLayout.LayoutParams ZOOM_PARAMS = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT,Gravity.BOTTOM);
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mWebView1 = (WebView) findViewById(R.id.webview1);
            mWebView2 = (WebView) findViewById(R.id.webview2);  
            Button btn = (Button)findViewById(R.id.next);
            mFlipper = (ViewFlipper)findViewById(R.id.flipper);
            FrameLayout mContentview = (FrameLayout)getWindow().getDecorView().findViewById(android.R.id.content);
            final View zoom = this.mWebView1.getZoomControls();
            mContentview.addView(zoom, ZOOM_PARAMS);
            zoom.setVisibility(View.GONE);                     
            mWebView1.getSettings().setJavaScriptEnabled(true); 
      //      mWebView.loadUrl("file:///storage/appliGA/testTooltips.html");
            mWebView1.loadUrl("http://10.0.2.2:8080/OL/testTooltips.html");       
            mWebView2.getSettings().setJavaScriptEnabled(true); 
    //      mWebView.loadUrl("file:///storage/appliGA/testTooltips.html");
            mWebView2.loadUrl("http://10.0.2.2:8080/OL/testVector.html");       
     
            btn.setOnClickListener(new View.OnClickListener() {
    			@Override
    			public void onClick(View view) {
    				mFlipper.showNext();
    				Log.i("test btn", "bouton cliqué");
    			}
    		});
        }
    Une idée du problème?

    ---EDIT2---
    Je suis en train de lire cette conversation, qui pourrait m'aider à passer d'une webview à l'autre sans bouton =)


    ---EDIT3---
    Le problème ce dessus est réglé, une erreur de "<" dans le xml, je me lance maintenant dans le passage des webview "sans le bouton". Merci pour le lien et les indications =)
    Dernière modification par Invité ; 30/06/2011 à 13h46.

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai essayé d'utiliser gesturedetector en regardant la doc, des tutos sur le net et la conversation dont j'ai mis le lien plus haut ... mais je ne m'en sors pas.
    voici mon code :
    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
    public class FlipperDemo extends Activity{ 
    	static String[] items ={"AB", "CD", "EF", "	GH", "IJ", "KL", "MN", "OP", "QR", "ST", "UV", 
    							"WX", "YZ", "1-2", "3-4", "5-6","7-8", "9-10", "11-12", "13-14", 
    							"15-16", "17-18", "19-20"};
    	private GestureDetector gestureDetector;
    	View.OnTouchListener gestureListener;
    	private int currentIndex = 0;
     
    	ViewFlipper flipper;
     
    	Animation slideLeftIn;
    	Animation slideLeftOut;
    	Animation slideRightIn;
    	Animation slideRightOut;	
     
     
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            flipper=(ViewFlipper)findViewById(R.id.details);
     
            slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
            slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_out_left);
            slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
            slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);
     
            if (items != null)
            {
            TextView txt = new TextView(this);
     
            txt.setText(items[currentIndex]);
            LinearLayout mylayout = new LinearLayout(this);
            mylayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            mylayout.addView(txt);
            flipper.addView(mylayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            }     	 
     
    		gestureDetector = new GestureDetector(this, new MyGestureDetector());
     
        }
    	public boolean onTouch(View v, MotionEvent event) {
    		if (gestureDetector.onTouchEvent(event)) {
    		return gestureDetector.onTouchEvent(event);
    		}
    		return false;
    	}
     
    	class MyGestureDetector extends SimpleOnGestureListener {  
    		private static final int SWIPE_MIN_DISTANCE = 120;  
    		private static final int SWIPE_MAX_OFF_PATH = 250;  
    		private static final int SWIPE_THRESHOLD_VELOCITY = 200;  
    		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {   
    			System.out.println(" in onFling() :: ");   
    			if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)    
    				return false;   
    			if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {    
    				flipper.setInAnimation(slideLeftIn);    
    				flipper.setInAnimation(slideRightOut);    
    				flipper.showNext();   
    				} 
    			else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {    
    				flipper.setInAnimation(slideRightIn);    
    				flipper.setInAnimation(slideLeftOut);    
    				flipper.showPrevious();   
    				}   
    		return super.onFling(e1, e2, velocityX, velocityY);  
    		}
    	}
    }
    si je rajoute implements OnGestureListener aprés l'extends activity de ma classe, je dois rajouter des "unimplements methods" ce que je fais, mais si je les mets dans la class MyGestureDetector j'ai plein d'erreur java :s

    Si je ne met pas l'implement OnGestureListener, je n'ai aucune erreur dans le code, aucune dans le log, mais j'affiche juste le TextView "AB" et impossible de switcher sur les autres.
    Donc si quelqu'un peut m'aider à trouver mon erreur, ou m'expliquer ce que je n'ai pas compris =) merci
    Dernière modification par Invité ; 30/06/2011 à 13h46.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bon j'ai réussi à refaire ce tuto sur gesturedetector et je n'ai eu aucun problème, cependant j'essai de l'utiliser pour afficher mes webview mais je suis encore loin d'un bon résultat.

    voici mon dernier code :
    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
    public class FlipperDemo extends Activity{ 
    	private GestureDetector mGestureDetector;
    	ViewFlipper mFlipper;
    	Animation slideLeftIn;
    	Animation slideLeftOut;
    	Animation slideRightIn;
    	Animation slideRightOut;
    	private int currentIndex = 0;
    	static String[] items ={"Ajout Bouillon", "Anses d'Arlet", "Basse Pointe", "Bellefontaine"};
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    	  super.onCreate(savedInstanceState);
          mFlipper = (ViewFlipper)findViewById(R.id.flipper);
          mGestureDetector = new GestureDetector(new LearnGestureListener());
         if(items != null){
         	TextView text1 = new TextView(this);
        	TextView text2= new TextView(this);
            text1.setText("cet item est :"); 
            text2.setText(items[currentIndex]);
            LinearLayout mylayout = new LinearLayout(this);
            mylayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            mylayout.addView(text1);    
            mylayout.addView(text2);
     
     
          mFlipper.addView(mylayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
          slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
          slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_out_left);
          slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
          slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);
     
          mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));
          mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
          }	
     }
     
        public boolean OnTouch(View view, MotionEvent event){
    		if (mGestureDetector.onTouchEvent(event)) {
    		return mGestureDetector.onTouchEvent(event);
    		}else{
    		return false;
    		}
        }
     
    	class LearnGestureListener extends GestureDetector.SimpleOnGestureListener{
    		private static final int SWIPE_MIN_DISTANCE = 120;  
    		private static final int SWIPE_MAX_OFF_PATH = 250;  
    		private static final int SWIPE_THRESHOLD_VELOCITY = 200;  
    	  @Override
    	  public boolean onSingleTapUp(MotionEvent ev) {
    	    Log.d("onSingleTapUp",ev.toString());
    	    return true;
    	  }
    	  @Override
    	  public void onShowPress(MotionEvent ev) {
    	    Log.d("onShowPress",ev.toString());
    	  }
    	  @Override
    	  public void onLongPress(MotionEvent ev) {
    	    Log.d("onLongPress",ev.toString());
    	  }
    	  @Override
    	  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    	    Log.d("onScroll",e1.toString());
    	    return true;
    	  }
    	  @Override
    	  public boolean onDown(MotionEvent ev) {
    	    Log.d("onDownd",ev.toString());
    	    return true;
    	  }
    	  @Override
    	  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    	    Log.d("d",e1.toString());
    	    Log.d("e2",e2.toString());
    		if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)    
    			return false;   
    		if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {    
    			mFlipper.setInAnimation(slideLeftIn);    
    			mFlipper.setInAnimation(slideRightOut);    
    			mFlipper.showNext();   
    			} 
    		else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {    
    			mFlipper.setInAnimation(slideRightIn);    
    			mFlipper.setInAnimation(slideLeftOut);    
    			mFlipper.showPrevious();   
    			}   
    		return super.onFling(e1, e2, velocityX, velocityY);  
    	  }
    	}
    }
    Et voici mon log cat:
    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
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948): FATAL EXCEPTION: main
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.julie/com.julie.FlipperDemo}: java.lang.NullPointerException
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at android.os.Handler.dispatchMessage(Handler.java:99)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at android.os.Looper.loop(Looper.java:123)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at java.lang.reflect.Method.invoke(Method.java:521)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at dalvik.system.NativeStart.main(Native Method)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948): Caused by: java.lang.NullPointerException
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at com.julie.FlipperDemo.onCreate(FlipperDemo.java:50)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    06-30 14:08:59.163: ERROR/AndroidRuntime(2948):     ... 11 more

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 44
    Points : 76
    Points
    76
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void onCreate(Bundle savedInstanceState) {
    	  super.onCreate(savedInstanceState);
          mFlipper = (ViewFlipper)findViewById(R.id.flipper);
    Il manque un truc là. Tu donnes pas ton layout de base qui contient ton flipper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            flipper=(ViewFlipper)findViewById(R.id.details);

  8. #8
    Invité
    Invité(e)
    Par défaut
    oups je l'avais mis, je sais pas pourquoi je l'ai plus, mais effectivement avec quelques autres modificationsje n'ai plus d'erreur de logcat, mais que j'essaye d'afficher mes webview, des images ou les textview que j'ai dans le code ci-dessus je n'affiche qu'une page blanche au lancement de l'appli. Je cherche de mon côté mais si quelqu'un à une idée je dis pas non.


    Juste pour être sur, je vous met mon main.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:orientation="vertical"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        >  
        <ViewFlipper android:id="@+id/flipper"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            >  
        </ViewFlipper>  
    </LinearLayout>
    je ne pense pas qu'il manque quelquchose car j'ai suivi ce tuto sur l'utilisation de flipper, mais comme ça ne parler pas du tout de GestureDetector
    Dernière modification par Invité ; 04/07/2011 à 10h31.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Je pense avoir trouvé d'où venait le problème, ou au moins une partie. Lorsque je fais ce code aucune erreurs, les log s'affichent bien.
    Mais si j'essai de l'adapter à mon programme qui contient un flipper là j'ai des problèmes. J'ai simplifié mon code au maximum afin de faire des tests, le voici :
    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
    public class FlipperDemo extends Activity{ 
    	private GestureDetector mGestureDetector;
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    	  super.onCreate(savedInstanceState);
    	  setContentView(R.layout.main);
          mFlipper = (ViewFlipper)findViewById(R.id.flipper);
          mGestureDetector = new GestureDetector(this, new LearnGestureListener());
     
     }
    	@Override
    	public boolean onTouchEvent(MotionEvent event) {
    		if (mGestureDetector.onTouchEvent(event))
    			return mGestureDetector.onTouchEvent(event);
    		else
    			return false;
     
     }
     
    	class LearnGestureListener extends GestureDetector.SimpleOnGestureListener{
    		private static final int SWIPE_MIN_DISTANCE = 120;  
    		private static final int SWIPE_MAX_OFF_PATH = 250;  
    		private static final int SWIPE_THRESHOLD_VELOCITY = 200;  
    	  @Override
    	  public boolean onSingleTapUp(MotionEvent ev) {
    	    Log.d("onSingleTapUp",ev.toString());
    	    System.out.println("single tap");
    	    return true;
    	  }
    	  @Override
    	  public void onShowPress(MotionEvent ev) {
    	    Log.d("onShowPress",ev.toString());
    	    System.out.println("show press");
    	  }
    	  @Override
    	  public void onLongPress(MotionEvent ev) {
    	    Log.d("onLongPress",ev.toString());
    	    System.out.println("long press");
    	  }
    	  @Override
    	  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    	    Log.d("onScroll",e1.toString());
    	    return true;
    	  }
    	  @Override
    	  public boolean onDown(MotionEvent ev) {
    	    Log.d("onDownd",ev.toString());
    	    return true;
    	  }
    	  @Override
    	  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    	    Log.d("d",e1.toString());
    	    Log.d("e2",e2.toString());
    	    return true;
    	  }
    	}
    }
    Mon appli se lance, lorsque je clique sur l'écran, aucun log n'apparait, comme si le mouvement n'était pas détecté, et quand je "glisse" sur l'écran j'ai les log d'erreurs suivants :
    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
    07-04 09:26:45.264: ERROR/AndroidRuntime(916): FATAL EXCEPTION: main
    07-04 09:26:45.264: ERROR/AndroidRuntime(916): java.lang.NullPointerException
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at com.julie.FlipperDemo$LearnGestureListener.onScroll(FlipperDemo.java:101)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at android.view.GestureDetector.onTouchEvent(GestureDetector.java:541)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at com.julie.FlipperDemo.onTouchEvent(FlipperDemo.java:71)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at android.app.Activity.dispatchTouchEvent(Activity.java:2089)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at android.os.Handler.dispatchMessage(Handler.java:99)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at android.os.Looper.loop(Looper.java:123)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at java.lang.reflect.Method.invokeNative(Native Method)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at java.lang.reflect.Method.invoke(Method.java:521)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    07-04 09:26:45.264: ERROR/AndroidRuntime(916):     at dalvik.system.NativeStart.main(Native Method)
    sachant que la ligne 101 est la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Log.d("onScroll",e1.toString());
    et que la ligne 71 et la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (mGestureDetector.onTouchEvent(event))
    Si je change cette partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public boolean onTouchEvent(MotionEvent event) {
    		if (mGestureDetector.onTouchEvent(event))
    			return mGestureDetector.onTouchEvent(event);
    		else
    			return false;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     public boolean OnTouch(View view, MotionEvent event){
    		if (mGestureDetector.onTouchEvent(event)) {
    		return mGestureDetector.onTouchEvent(event);
    		}else{
    		return false;
    		}
        }
    là je n'ai plus aucune erreur, mais aucun mouvement (glisser ou cliquer) n'est détecté.

    Faut-il utiliser OnTouch ou OntouchEvent? et comment les utiliser? mes erreurs viennent-elles bien de cette partie du code?


    ----EDIT----
    J'ai résolu ce problème, en laissant le OnTouchEvent
    En fait aucune erreur dans le code java, mais dans mon main.xml, c'est de là que venait le NullPointerException.
    En effet j'avais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ViewFlipper android:id="@+id/flipper"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            ></ViewFlipper>
    et j'ai changé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ViewFlipper android:id="@+id/flipper"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            />
    et je n'ai plus d'erreur.
    Dernière modification par Invité ; 04/07/2011 à 15h01.

  10. #10
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Je ne sais pas si c'est fait exprès, mais tu appelles deux fois la fonction de OnTouchEvent .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public boolean OnTouch(View view, MotionEvent event){
    		if (mGestureDetector.onTouchEvent(event)) {
    		return mGestureDetector.onTouchEvent(event);
    		}else{
    		return false;
    		}
        }

    Cela me paraît plus normal de l'apreller qu'une fois ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public boolean OnTouch(View view, MotionEvent event){
    		return mGestureDetector.onTouchEvent(event);
    	}	
        }
    Après as tu remis le code pour le changement de vue dans le OnFling
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)    
    			return false;   
    		if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {    
    			mFlipper.setInAnimation(slideLeftIn);    
    			mFlipper.setInAnimation(slideRightOut);    
    			mFlipper.showNext();   
    			} 
    		else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {    
    			mFlipper.setInAnimation(slideRightIn);    
    			mFlipper.setInAnimation(slideLeftOut);    
    			mFlipper.showPrevious();   
    			}   
    		return super.onFling(e1, e2, velocityX, velocityY);

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Bonjour,

    Je ne sais pas si c'est fait exprès, mais tu appelles deux fois la fonction de OnTouchEvent .
    J'ai suivi un tuto, je vais essayé ce que tu me conseille.

    Après as tu remis le code pour le changement de vue dans le OnFling
    Oui je l'ai remis
    ---EDIT---
    J'ai modifié la partie OntouchEvent comme tu m'as conseillé, aucune erreur et ça fonctionne de la même façon, je vais donc laisser comme ça merci.
    Par contre cela n'a pas résolu mon problème.

    ---EDIT2---
    Les vues ne changent pas quand je "glisse" sur l'écran, mais le mouvement est détecté car mes messages toast s'affichent.
    j'ai rajouté des log.i pour voir la valeur de currentIndex, et sa valeur augmente lorsque je glisse à gauche et diminue lorsque je vais à droite, donc cette partie du code fonctionne, le problème c'est que je n'affiche pas les item au index 2, 3 ...

    Problème résolu, je n'avais pas remis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    text2.setText(items[currentIndex]);
    dans le onFLing, donc forcément ça ne marchait pas. Tout fonctionne merci pour ton aide. Je vais maintenant essayer d'appliquer celà à mes webView.
    Dernière modification par Invité ; 04/07/2011 à 15h01.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Re ... je reviens avec quelques problème pour afficher mes webview en utilisant flipper et gestureDetector.

    J'ai essayé d'adapter le code que j'ai fait précédemment comme ceci :
    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
    public class GaGesture extends Activity {
        /** Called when the activity is first created. */
    	private GestureDetector mGestureDetector;
    	ViewFlipper mFlipper;
    	Animation slideLeftIn;
    	Animation slideLeftOut;
    	Animation slideRightIn;
    	Animation slideRightOut;
    	WebView mWebView1;
    	WebView mWebView2;
    	WebView mWebView3;
    	WebView mWebView4;
    	WebView mWebView5;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mFlipper = (ViewFlipper)findViewById(R.id.flipper);
            mGestureDetector = new GestureDetector(this, new LearnGestureListener());
     
            mWebView1 = (WebView) findViewById(R.id.webview1);
            mWebView1.getSettings().setJavaScriptEnabled(true); 
        //    mWebView1.loadUrl("file:///storage/appliGA/ga041.html");
            mWebView1.loadUrl("http://10.0.2.2:8080/OL/ga041.html"); 
     
            mWebView2 = (WebView) findViewById(R.id.webview2);
            mWebView2.getSettings().setJavaScriptEnabled(true); 
      //      mWebView2.loadUrl("file:///storage/appliGA/ga042.html");
            mWebView2.loadUrl("http://10.0.2.2:8080/OL/ga042.html"); 
     
            mWebView3 = (WebView) findViewById(R.id.webview3);
            mWebView3.getSettings().setJavaScriptEnabled(true); 
        //    mWebView3.loadUrl("file:///storage/appliGA/ga044.html");
            mWebView3.loadUrl("http://10.0.2.2:8080/OL/ga043.html"); 
     
            mWebView4 = (WebView) findViewById(R.id.webview4);
            mWebView4.getSettings().setJavaScriptEnabled(true); 
      //      mWebView4.loadUrl("file:///storage/appliGA/ga044.html");
            mWebView4.loadUrl("http://10.0.2.2:8080/OL/ga044.html");
     
            mWebView5 = (WebView) findViewById(R.id.webview5);
            mWebView5.getSettings().setJavaScriptEnabled(true); 
        //    mWebView5.loadUrl("file:///storage/appliGA/ga045.html");
            mWebView5.loadUrl("http://10.0.2.2:8080/OL/ga045.html"); 
     
            LinearLayout mylayout = new LinearLayout(this);
            mylayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            mFlipper.addView(mylayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
     
            slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); //attention inversement du code des in et out, ou des left et des right!!
            slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_out_left);
            slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
            slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); 
            mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));
            mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
        }
     
    	@Override
    	public boolean onTouchEvent(MotionEvent event) {
    			return mGestureDetector.onTouchEvent(event);
     }
     
    	class LearnGestureListener extends GestureDetector.SimpleOnGestureListener{ 
    		private static final int SWIPE_MIN_DISTANCE = 120;  
    		private static final int SWIPE_MAX_OFF_PATH = 250;  
    		private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    	  @Override
    	  public boolean onSingleTapUp(MotionEvent ev) {
    	    Log.d("onSingleTapUp",ev.toString());
    	    return true;
    	  }
    	  @Override
    	  public void onShowPress(MotionEvent ev) {
    	    Log.d("onShowPress",ev.toString());
    	  }
    	  @Override
    	  public void onLongPress(MotionEvent ev) {
    	    Log.d("onLongPress",ev.toString());
    	  }
    	  @Override
    	  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    	    Log.d("onScroll",e1.toString());
    	    return true;
    	  }
    	  @Override
    	  public boolean onDown(MotionEvent ev) {
    	    Log.d("onDownd",ev.toString());
    	    return true;
    	  }
    	  @Override
    	  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    	    Log.d("d",e1.toString());
    	    Log.d("e2",e2.toString());
    	    if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
    			return false;
    		if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
    				&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
    			mFlipper.setInAnimation(slideLeftIn);
    			mFlipper.setOutAnimation(slideLeftOut);
    			mFlipper.showNext();
    		}
    		else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
    				&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
    			mFlipper.setInAnimation(slideRightIn);
    			mFlipper.setOutAnimation(slideRightOut);
    			mFlipper.showPrevious();
    		}
    	return false;
    	  }
    	}
    }
    et le main est le suivant :
    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
    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:orientation="vertical"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        >  
        <ViewFlipper android:id="@+id/flipper"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            >
         <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview1"/>
        <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview2"
        android:scrollbars="horizontal"/>
        <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview3"
        android:scrollbars="horizontal"/>
        <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview4"
        android:scrollbars="horizontal"/>
        <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview5"
        android:scrollbars="horizontal"/>
        </ViewFlipper>  
    </LinearLayout>
    Lorsque mon appli se lance, j'ai les warning suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    07-04 11:50:07.126: WARN/webcore(737): Can't get the viewWidth after the first layout
    07-04 11:50:07.146: WARN/webcore(737): Can't get the viewWidth after the first layout
    07-04 11:50:07.166: WARN/webcore(737): Can't get the viewWidth after the first layout
    07-04 11:50:07.206: WARN/webcore(737): Can't get the viewWidth after the first layout
    mais ma 1ére webView s'affiche bien, cependant dés que j'essai de glisser j'ai les erreurs suivantes :
    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
    07-04 11:53:50.167: ERROR/AndroidRuntime(737): FATAL EXCEPTION: main
    07-04 11:53:50.167: ERROR/AndroidRuntime(737): java.lang.NullPointerException
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at com.julie.GaGesture$LearnGestureListener.onScroll(GaGesture.java:98)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at android.view.GestureDetector.onTouchEvent(GestureDetector.java:541)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at com.julie.GaGesture.onTouchEvent(GaGesture.java:76)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at android.app.Activity.dispatchTouchEvent(Activity.java:2089)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at android.os.Handler.dispatchMessage(Handler.java:99)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at android.os.Looper.loop(Looper.java:123)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at java.lang.reflect.Method.invokeNative(Native Method)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at java.lang.reflect.Method.invoke(Method.java:521)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    07-04 11:53:50.167: ERROR/AndroidRuntime(737):     at dalvik.system.NativeStart.main(Native Method)
    Comme se sont les mêmes erreurs que j'ai eu précédemment je me suis dit, je vais modifier le xml comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:orientation="vertical"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        >  
        <ViewFlipper android:id="@+id/flipper"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            /> 
    </LinearLayout>
    et je déclare mes webView comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     mWebView1 = new WebView(this);
    et j'ajoute la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mylayout.addView(mWebView1);
    quand je lance l'appli, j'affiche ma webview1 et les mouvement sont détecté.

    Mais comment faire un sorte que le "glisser" fasse apparaitre les autres webview? Cette fois ce n'est pas un tableau de string, je ne peux donc pas faire un test sur l'item.

    Ma première idée (mettre les webview dans le flipper dans le xml) me semblait bonne, mais ça ne marche pas

    Merci pour vos conseils, je continue à chercher et à tester de mon coté.

  13. #13
    Invité
    Invité(e)
    Par défaut
    J'ai essayé de reprendre l'idée d'un tableau, en créant un tableau d'objet avec des webview, et j'ai modifié le code en fonction de ça, mais j'ai des erreurs :
    voici mon code :
    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
    public class GaGesture extends Activity {
        /** Called when the activity is first created. */
    	private GestureDetector mGestureDetector;
    	ViewFlipper mFlipper;
    	Animation slideLeftIn;
    	Animation slideLeftOut;
    	Animation slideRightIn;
    	Animation slideRightOut;
    	public int currentIndex = 0;
    	public int maxIndex = webV.length;
    	static WebView mWebView1;
    	static WebView mWebView2;
    	static WebView mWebView3;
    	static WebView mWebView4;
    	static WebView mWebView5;
    	WebView principalWV;
    	static WebView[] webV = { mWebView1,mWebView2,mWebView3,mWebView4,mWebView5 } ;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mFlipper = (ViewFlipper)findViewById(R.id.flipper);
            mGestureDetector = new GestureDetector(this, new LearnGestureListener());
     
            mWebView1 = new WebView(this);
            mWebView1.getSettings().setJavaScriptEnabled(true); 
        //    mWebView1.loadUrl("file:///storage/appliGA/ga041.html");
            mWebView1.loadUrl("http://10.0.2.2:8080/OL/ga041.html"); 
     
            mWebView2 = new WebView(this);
            mWebView2.getSettings().setJavaScriptEnabled(true); 
      //      mWebView2.loadUrl("file:///storage/appliGA/ga042.html");
            mWebView2.loadUrl("http://10.0.2.2:8080/OL/ga042.html"); 
     
            mWebView3 = new WebView(this);
            mWebView3.getSettings().setJavaScriptEnabled(true); 
        //    mWebView3.loadUrl("file:///storage/appliGA/ga044.html");
            mWebView3.loadUrl("http://10.0.2.2:8080/OL/ga043.html"); 
     
            mWebView4 = new WebView(this);
            mWebView4.getSettings().setJavaScriptEnabled(true); 
      //      mWebView4.loadUrl("file:///storage/appliGA/ga044.html");
            mWebView4.loadUrl("http://10.0.2.2:8080/OL/ga044.html");
     
            mWebView5 = new WebView(this);
            mWebView5.getSettings().setJavaScriptEnabled(true); 
        //    mWebView5.loadUrl("file:///storage/appliGA/ga045.html");
            mWebView5.loadUrl("http://10.0.2.2:8080/OL/ga045.html"); 
     
            principalWV = new WebView(this);
            principalWV.addView(webV[currentIndex]);
            LinearLayout mylayout = new LinearLayout(this);
            mylayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            mylayout.addView(principalWV);
            mFlipper.addView(mylayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
     
            slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); //attention inversement du code des in et out, ou des left et des right!!
            slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_out_left);
            slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
            slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); 
            mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));
            mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
        }
     
    	@Override
    	public boolean onTouchEvent(MotionEvent event) {
    			return mGestureDetector.onTouchEvent(event);
     }
     
    	class LearnGestureListener extends GestureDetector.SimpleOnGestureListener{ 
    		private static final int SWIPE_MIN_DISTANCE = 120;  
    		private static final int SWIPE_MAX_OFF_PATH = 250;  
    		private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    	  @Override
    	  public boolean onSingleTapUp(MotionEvent ev) {
    	    Log.d("onSingleTapUp",ev.toString());
    	    return true;
    	  }
    	  @Override
    	  public void onShowPress(MotionEvent ev) {
    	    Log.d("onShowPress",ev.toString());
    	  }
    	  @Override
    	  public void onLongPress(MotionEvent ev) {
    	    Log.d("onLongPress",ev.toString());
    	  }
    	  @Override
    	  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    	    Log.d("onScroll",e1.toString());
    	    return true;
    	  }
    	  @Override
    	  public boolean onDown(MotionEvent ev) {
    	    Log.d("onDownd",ev.toString());
    	    return true;
    	  }
    	  @Override
    	  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    	    Log.d("d",e1.toString());
    	    Log.d("e2",e2.toString());
    	    if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
    			return false;
    		if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
    				&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
    			mFlipper.setInAnimation(slideLeftIn);
    			mFlipper.setOutAnimation(slideLeftOut);
    			if (currentIndex == maxIndex) {
    				currentIndex = 0;
    			}
    			else {
    				currentIndex = currentIndex + 1;				
    				Log.i("cI left :","cI leftswipe = "+ currentIndex);
    			}
    			principalWV.addView(webV[currentIndex]);
    			mFlipper.showNext();
    		}
    		else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
    				&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
    			mFlipper.setInAnimation(slideRightIn);
    			mFlipper.setOutAnimation(slideRightOut);
    			if (currentIndex == maxIndex) {
    				currentIndex = 0;
    			}
    			else {
    				currentIndex = currentIndex - 1;				
    				Log.i("cI right:","cI rightswipe = "+ currentIndex);
    			}
    			principalWV.addView(webV[currentIndex]);
    			mFlipper.showPrevious();
    		}
    	return false;
    	  }
    	}
    }
    et le logcat :
    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
    07-04 12:13:04.176: ERROR/AndroidRuntime(883): FATAL EXCEPTION: main
    07-04 12:13:04.176: ERROR/AndroidRuntime(883): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.julie/com.julie.GaGesture}: java.lang.NullPointerException
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at android.os.Handler.dispatchMessage(Handler.java:99)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at android.os.Looper.loop(Looper.java:123)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at java.lang.reflect.Method.invokeNative(Native Method)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at java.lang.reflect.Method.invoke(Method.java:521)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at dalvik.system.NativeStart.main(Native Method)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883): Caused by: java.lang.NullPointerException
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at android.view.ViewGroup.addView(ViewGroup.java:1815)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at android.view.ViewGroup.addView(ViewGroup.java:1802)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at com.julie.GaGesture.onCreate(GaGesture.java:67)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    07-04 12:13:04.176: ERROR/AndroidRuntime(883):     ... 11 more
    la ligne 67 est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     principalWV.addView(webV[currentIndex]);
    en effet je ne sais pas comment ajouter le 1er item de mon tableau (soit webview1) à principalWV.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Mettre le code html dans le code java serait peut-être une solution mais j'aimerais éviter de passer par ça.

    ---EDIT---
    J'ai éssayé d'afficher ma webview avec cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    principalWV.bringChildToFront(webV[currentIndex]);
    Mais l'écran reste noir, les mouvements sont cependant détectés.
    Dernière modification par Domi2 ; 05/07/2011 à 06h54.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Je pense avoir résolu le problème ... enfin en partie, je suis repartie sur un xml de ce type :
    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
    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:orientation="vertical"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        >  
        <ViewFlipper 
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content"
    		android:id="@+id/flipper">
        <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview1"/>
        <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview2"/>
        <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview3"/>
        <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview4"/>
        <WebView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webview5"/>
        </ViewFlipper>
    </LinearLayout>
    et mon code java est le suivant :
    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
    public class GaGesture extends Activity {
        /** Called when the activity is first created. */
    	private GestureDetector mGestureDetector;
    	ViewFlipper mFlipper;
    	Animation slideLeftIn;
    	Animation slideLeftOut;
    	Animation slideRightIn;
    	Animation slideRightOut;
    	WebView mWebView1;
    	WebView mWebView2;
    	WebView mWebView3;
    	WebView mWebView4;
    	WebView mWebView5;
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            setContentView(R.layout.main);
            mFlipper = (ViewFlipper)findViewById(R.id.flipper);
            mGestureDetector = new GestureDetector(this, new LearnGestureListener());
            mWebView1 = (WebView) findViewById(R.id.webview1);
            mWebView2 = (WebView) findViewById(R.id.webview2);  
            mWebView3 = (WebView) findViewById(R.id.webview3); 
            mWebView4 = (WebView) findViewById(R.id.webview4); 
            mWebView5 = (WebView) findViewById(R.id.webview5); 
     
            mWebView1.getSettings().setJavaScriptEnabled(true); 
        //    mWebView1.loadUrl("file:///storage/appliGA/ga041.html");
            mWebView1.loadUrl("http://10.0.2.2:8080/OL/ga041.html"); 
     
            mWebView2.getSettings().setJavaScriptEnabled(true); 
      //      mWebView2.loadUrl("file:///storage/appliGA/ga042.html");
            mWebView2.loadUrl("http://10.0.2.2:8080/OL/ga042.html"); 
     
            mWebView3.getSettings().setJavaScriptEnabled(true); 
        //    mWebView3.loadUrl("file:///storage/appliGA/ga044.html");
            mWebView3.loadUrl("http://10.0.2.2:8080/OL/ga043.html"); 
     
            mWebView4.getSettings().setJavaScriptEnabled(true); 
      //      mWebView4.loadUrl("file:///storage/appliGA/ga044.html");
            mWebView4.loadUrl("http://10.0.2.2:8080/OL/ga044.html");
     
            mWebView5.getSettings().setJavaScriptEnabled(true); 
        //    mWebView5.loadUrl("file:///storage/appliGA/ga045.html");
            mWebView5.loadUrl("http://10.0.2.2:8080/OL/ga045.html"); 
     
            slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); 
            slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_out_left);
            slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
            slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); 
            mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));
            mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
        }
     
    /**     public boolean onTouch(MotionEvent event) {
                            return mGestureDetector.onTouchEvent(event);
     }*/
        @Override
    	public boolean onTouchEvent(MotionEvent event) {
    		if (mGestureDetector.onTouchEvent(event))
    			return true;
    		else
    			return false;
    	}
     
    	class LearnGestureListener extends GestureDetector.SimpleOnGestureListener{ 
    		private static final int SWIPE_MIN_DISTANCE = 120;  
    		private static final int SWIPE_MAX_OFF_PATH = 250;  
    		private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    	  @Override
    	  public boolean onSingleTapUp(MotionEvent ev) {
    	    Log.d("onSingleTapUp",ev.toString());
    	    return true;
    	  }
    	  @Override
    	  public void onShowPress(MotionEvent ev) {
    	    Log.d("onShowPress",ev.toString());
    	  }
    	  @Override
    	  public void onLongPress(MotionEvent ev) {
    	    Log.d("onLongPress",ev.toString());
    	  }
    	  @Override
    	  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    	    Log.d("onScroll",e1.toString());
    	    if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
    			return false;
    		if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(distanceX) > SWIPE_THRESHOLD_VELOCITY) {
    			mFlipper.setInAnimation(slideLeftIn);
    			mFlipper.setOutAnimation(slideLeftOut);
    			mFlipper.showNext();
    		}
    		else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(distanceX) > SWIPE_THRESHOLD_VELOCITY) {
    			mFlipper.setInAnimation(slideRightIn);
    			mFlipper.setOutAnimation(slideRightOut);
    			mFlipper.showPrevious();
    		}
    	    return true;
    	  }
    	  @Override
    	  public boolean onDown(MotionEvent ev) {
    	    Log.d("onDownd",ev.toString());
    	    return true;
    	  }
    	  @Override
    	  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    	    Log.d("d",e1.toString());
    	    Log.d("e2",e2.toString());
    	    if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
    			return false;
    		if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
    			mFlipper.setInAnimation(slideLeftIn);
    			mFlipper.setOutAnimation(slideLeftOut);
    			mFlipper.showNext();
    		}
    		else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
    			mFlipper.setInAnimation(slideRightIn);
    			mFlipper.setOutAnimation(slideRightOut);
    			mFlipper.showPrevious();
    		}
    		return false;
    	  }
    	}
    }
    Et ça marche sur l'émulateur, c'est assez long à réagir ... mais ça marche.
    Mais quand je met l'apk et tous les fichiers (html et image) sur l'Android ... j'ai une fermeture forcée dés que je glisse sur l'écran :s

    Certe j'ai mis le même code dans le onfling et le scroll c'était plus pour tester sur l'émulateur, sur l'Android j'ai testé avec le code uniquement dans le OnFling et dans les 2 et j'ai le même problème.

    là je ne vois vraiment pas d'où vient le problème :s

    ---EDIT---
    Je retire ce que j'ai dit, ce code à aussi un problème sur l'émulateur, une fois que je fais le mouvement OnScroll, je ne détecte plus que ce dernier et pas les autres, alors qu'au lancement de l'appli je les détecté tous, voici un extrait du log, sachant qu'entre chaque onscroll je cliqué une fois sur l'écran :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    07-04 14:23:30.163: DEBUG/onDownd(845): MotionEvent{44f31c50 action=0 x=396.0 y=657.0 pressure=0.0 size=0.0}
    07-04 14:23:30.183: DEBUG/onSingleTapUp(845): MotionEvent{44f31c50 action=1 x=396.0 y=657.0 pressure=0.0 size=0.0}
    07-04 14:23:31.183: DEBUG/skia(125): purging 46K from font cache [6 entries]
    07-04 14:23:32.363: DEBUG/dalvikvm(125): GC_EXPLICIT freed 662 objects / 36808 bytes in 1171ms
    07-04 14:23:36.384: DEBUG/dalvikvm(845): GC_FOR_MALLOC freed 2648 objects / 568888 bytes in 159ms
    07-04 14:23:44.194: DEBUG/onScroll(845): MotionEvent{44f317c8 action=0 x=396.0 y=657.0 pressure=0.0 size=0.0}
    07-04 14:23:44.304: DEBUG/onScroll(845): MotionEvent{44f317c8 action=0 x=396.0 y=657.0 pressure=0.0 size=0.0}
    07-04 14:23:44.894: DEBUG/onScroll(845): MotionEvent{44f317c8 action=0 x=396.0 y=657.0 pressure=0.0 size=0.0}
    07-04 14:23:46.084: DEBUG/onScroll(845): MotionEvent{44f317c8 action=0 x=396.0 y=657.0 pressure=0.0 size=0.0}
    j'ai essayé de mettre toute la partie onScroll en commentaire, et lorsque j'affiche ma webview, je ne détecte plus aucun mouvement :s pourtant cette fois mon code me semblait bon.
    Dernière modification par Invité ; 04/07/2011 à 16h27.

  16. #16
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Hmm,

    J'avais eu le même problème à un moment donnée , et je crois que j'avais redéfini la procédure onTouchEvent de ma View en appellant celle de l'activity.

    Il faudrait que tu es un code qui fasse :
    Si c'est un slide tu prends sinon tu laisses à la WebView.

    http://developer.android.com/referen...w.MotionEvent)

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    je crois que j'avais redéfini la procédure onTouchEvent de ma View en appellant celle de l'activity.
    je ne suis pas sur d'avoir compris? tu avais une autre activity dans laquelle tu définissais onTouchEvent?

    Si c'est un slide tu prends sinon tu laisses à la WebView.
    et ça je le fait avec le onToucheEvent c'est ça?
    si c'est ça, j'ai essayé...

    J'ai remarqué que si je laissait onTouch j'avais des erreur dans le log sauf quand je commentait la partie on Scroll, mais dans ce cas je ne détecte plus aucun mouvement.

    Et si je met onToucheEvent je détecte tous les mouvement avant le chargement de la webView, mais dés qu'elle est chargé je ne détecte plus rien, le problème vient peut-être de la webview?


    ----EDIT----
    J'ai remplacé mes webview par des images et là sur l'émulateur et l'android, en mettant onTouchEvent, et le code dans le onFling ça marche super bien. Seulement moi c'est mes webview que je veux afficher comme ça.
    Elles contiennent du htlm et du javascript ça peut jouer sur le problème? faut-il que je me résigne à trouver une autre solution que de passer par des webview?
    Dernière modification par Invité ; 05/07/2011 à 10h11.

  18. #18
    Invité
    Invité(e)
    Par défaut
    J'ai repris le code qui marchait trés bien avec les images mais en mettant mes webview à la place de mes imageView :
    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
    public class GaGesture extends Activity {
        /** Called when the activity is first created. */
    	private GestureDetector mGestureDetector;
    	ViewFlipper mFlipper;
    	Animation slideLeftIn;
    	Animation slideLeftOut;
    	Animation slideRightIn;
    	Animation slideRightOut;
    	WebView mWebView1;
    	WebView mWebView2;
    	WebView mWebView3;
    	WebView mWebView4;
    	WebView mWebView5;
     
    	@Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            setContentView(R.layout.main);
            mFlipper = (ViewFlipper)findViewById(R.id.flipper);
            mGestureDetector = new GestureDetector(this, new LearnGestureListener());
            mWebView1 = (WebView) findViewById(R.id.webview1);
            mWebView2 = (WebView) findViewById(R.id.webview2);  
            mWebView3 = (WebView) findViewById(R.id.webview3); 
            mWebView4 = (WebView) findViewById(R.id.webview4); 
            mWebView5 = (WebView) findViewById(R.id.webview5); 
     
            mWebView1.getSettings().setJavaScriptEnabled(true); 
        //    mWebView1.loadUrl("file:///storage/appliGA/ga041.html");
            mWebView1.loadUrl("http://10.0.2.2:8080/OL/ga041.html"); 
     
            mWebView2.getSettings().setJavaScriptEnabled(true); 
      //      mWebView2.loadUrl("file:///storage/appliGA/ga042.html");
            mWebView2.loadUrl("http://10.0.2.2:8080/OL/ga042.html"); 
     
            mWebView3.getSettings().setJavaScriptEnabled(true); 
        //    mWebView3.loadUrl("file:///storage/appliGA/ga044.html");
            mWebView3.loadUrl("http://10.0.2.2:8080/OL/ga043.html"); 
     
            mWebView4.getSettings().setJavaScriptEnabled(true); 
      //      mWebView4.loadUrl("file:///storage/appliGA/ga044.html");
            mWebView4.loadUrl("http://10.0.2.2:8080/OL/ga044.html");
     
            mWebView5.getSettings().setJavaScriptEnabled(true); 
        //    mWebView5.loadUrl("file:///storage/appliGA/ga045.html");
            mWebView5.loadUrl("http://10.0.2.2:8080/OL/ga045.html"); 
     
     
            slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); //attention inversement du code des in et out, ou des left et des right!!
            slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_out_left);
            slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
            slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); 
            mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));
            mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
        }
     
    	public boolean onTouchEvent(MotionEvent event) {
    		return (mGestureDetector.onTouchEvent(event));
    	}
     
    	class LearnGestureListener extends GestureDetector.SimpleOnGestureListener{ 
    		private static final int SWIPE_MIN_DISTANCE = 120;  
    		private static final int SWIPE_MAX_OFF_PATH = 250;  
    		private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    	  @Override
    	  public boolean onSingleTapUp(MotionEvent ev) {
    	    Log.d("onSingleTapUp",ev.toString());
    	    return true;
    	  }
    	  @Override
    	  public void onShowPress(MotionEvent ev) {
    	    Log.d("onShowPress",ev.toString());
    	  }
    	  @Override
    	  public void onLongPress(MotionEvent ev) {
    	    Log.d("onLongPress",ev.toString());
    	  }
    	  @Override
    	  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    	    Log.d("onScroll",e1.toString());
    	   return true;
    	  }
    	  @Override
    	  public boolean onDown(MotionEvent ev) {
    	    Log.d("onDownd",ev.toString());
    	    return true;
    	  }
    	  @Override
    	  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    	    Log.d("d",e1.toString());
    	    Log.d("e2",e2.toString());
    	    if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
    			return false;
    		if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
    			mFlipper.setInAnimation(slideLeftIn);
    			mFlipper.setOutAnimation(slideLeftOut);
    			mFlipper.showNext();
    		}
    		else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
    			mFlipper.setInAnimation(slideRightIn);
    			mFlipper.setOutAnimation(slideRightOut);
    			mFlipper.showPrevious();
    		}
    		return false;
    	  }
    	}
    }
    et j'ai les erreurs suivantes :
    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
    07-05 08:14:57.347: ERROR/AndroidRuntime(983): FATAL EXCEPTION: main
    07-05 08:14:57.347: ERROR/AndroidRuntime(983): java.lang.NullPointerException
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at com.julie.GaGesture$LearnGestureListener.onScroll(GaGesture.java:92)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at android.view.GestureDetector.onTouchEvent(GestureDetector.java:541)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at com.julie.GaGesture.onTouchEvent(GaGesture.java:70)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at android.app.Activity.dispatchTouchEvent(Activity.java:2089)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at android.os.Handler.dispatchMessage(Handler.java:99)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at android.os.Looper.loop(Looper.java:123)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at java.lang.reflect.Method.invokeNative(Native Method)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at java.lang.reflect.Method.invoke(Method.java:521)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    07-05 08:14:57.347: ERROR/AndroidRuntime(983):     at dalvik.system.NativeStart.main(Native Method)
    la ligne 92 étant la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.d("onScroll",e1.toString());
    et si je commente la partie onscroll .... je ne détecte aucun mouvements.

  19. #19
    Invité
    Invité(e)
    Par défaut conflit entre webview et gestureDetector?
    Je pense qu'il y a un conflit entre les webview et le gestureDetector ... en effet le programme fonctionne trés bien avec des TextView ou des ImagesView, mais pas avec les WebView.

    si personne n'a de solution pour régler ce problème en conservant gestureDetector je vais chercher une autre solution pour afficher mes pages web, voir trouver un autre moyen que webview pour les afficher... si quelqu'un a des conseils qu'il n'hésite pas=)

    Merci

  20. #20
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Je pense qu'il y a un conflit entre les webview et le gestureDetector ... en effet le programme fonctionne trés bien avec des TextView ou des ImagesView, mais pas avec les WebView.
    C'est bien ce que je t'expliquais il faut que tu redéfinisses le onTouchEvent de ta WebView après à toi de savoir si tu lui prends la main ou si tu lui laisses.


    Essaye de passer par cette fonction View.OnTouchListener
    http://developer.android.com/referen...hListener.html

    en interceptant les onTouch de ta WebView appelle ton gesture et en fonction du gesture fait définit si tu le prends ou si tu le redonnes à ta WebView .

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2003] OWC11.Spreadsheet et probleme d'affichage, de scroll horizontal
    Par jubourbon dans le forum IHM
    Réponses: 0
    Dernier message: 20/02/2012, 16h58
  2. Affichage news Scroll horizontal
    Par G_angel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/07/2010, 22h59
  3. Probleme d'affichage d'une JTable utilisant un tablemodel
    Par garfieldcut dans le forum Composants
    Réponses: 2
    Dernier message: 13/01/2006, 11h58
  4. synchroniser le scroll horizontal d'un Tmemo avec un Tedit
    Par bambino3996 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/08/2005, 12h06

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