Je suis en train de travailler sur un jeu où le joueur peut faire glisser et déposer des choses autour de l'écran. J'ai une méthode qui me permet de simuler un glisser/déposer de l'événement pour tous les objets que le joueur peut se déplacer autour. Pour ce déplacement, je suis en fait en laissant le point de vue qu'ils ont touché où il est, et la création d'une nouvelle ImageView avec et le réglage de la dessinés à la drawingCache de l'touché à vue, puis en déplaçant nouvellement créé ImageView autour de l'écran à la suite de leur doigt. Lorsque vous relâchez votre doigt (baisse de la vue) je suis appelant myLayout.remove(movingImg);
de descendre au bas de l'écran. Je rencontre un problème où, si je commence une simulation d'événement glisser manuellement, puis prenez l'un des autres articles, je suis un pointeur null sur la monmodèle.remove() appel, ici, c'est la trace de Journal:
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): java.lang.NullPointerException
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2122)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewGroup.drawChild(ViewGroup.java:2506)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2123)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewGroup.drawChild(ViewGroup.java:2506)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2123)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewGroup.drawChild(ViewGroup.java:2506)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2123)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewGroup.drawChild(ViewGroup.java:2506)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2123)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.View.draw(View.java:9032)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.widget.FrameLayout.draw(FrameLayout.java:419)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1910)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewRoot.draw(ViewRoot.java:1608)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewRoot.performTraversals(ViewRoot.java:1329)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewRoot.handleMessage(ViewRoot.java:1944)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.os.Handler.dispatchMessage(Handler.java:99)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.os.Looper.loop(Looper.java:126)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.app.ActivityThread.main(ActivityThread.java:3997)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at java.lang.reflect.Method.invokeNative(Native Method)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at java.lang.reflect.Method.invoke(Method.java:491)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at dalvik.system.NativeStart.main(Native Method)
La trace n'a pas de point de n'importe où à l'intérieur de mon activité. L'exception est lancée à chaque fois que l'on tente de l'appeler monmodèle.remove() sur la simulation en faisant glisser la vue. J'ai entouré cette ligne avec un try / catch, mais qui n'a rien fait. Je sais que c'est la ligne c'est de me donner de la difficulté parce que si j'en commentaire puis je ne suis pas une exception, mais, évidemment, puis de mon point de vue n'est jamais supprimée de l'écran. Je suis la construction de cette application sur un Motorola xoom, je ne suis pas sûr si ce est un dispositif problème spécifique ou pas bien. Personne ne sait ce qui pourrait se passer ici?
C'est la où la .removeView() est appelé à partir de:
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
Log.i(myTag, "Animation End");
try {
//myLayout.removeView(simulateMovingImg); //This is the line that is throwing a null pointer
simulateMovingImg.setVisibility(View.GONE); //This is how I am currently getting around the issue
params = new LayoutParams(oneImg.getWidth(),oneImg.getHeight()); // While its moving it appears larger than normal
simulateMovingImg.setLayoutParams(params); // so I set it back to the normal size
if(whichTarget == true){
targetImg.setImageDrawable(simulateMovingImg.getDrawable()); //targetImg is one of the 'drop zones' so I set its
// drawable to make it seem like the view was 'dropped' into this zone
}else{
target1Img.setImageDrawable(simulateMovingImg.getDrawable()); // same with target1Img.
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
iAmDone = true;
}
});
C'est à l'intérieur d'un AnimationListener pour le traduire animation qui est un déplacement de mon ImageView à partir de là que ça commence à l'endroit où ça s'est passé'