
/** * Starts to make fog */private voID startFogGenerator() { handler.postDelayed(new Runnable() { @OverrIDe public voID run() { final ImageVIEw img = new ImageVIEw(Activity.this); boolean showN1 = r.nextBoolean(); if (showN1) { img.setimageResource(R.drawable.nube_01); } else { img.setimageResource(R.drawable.nube_02); } Animation animation = AnimationUtils.loadAnimation(Activity.this,R.anim.translate_and_Alpha); animation.setAnimationListener(new Animation.AnimationListener() { @OverrIDe public voID onAnimationStart(Animation animation) { } @OverrIDe public voID onAnimationEnd(Animation animation) { fogLayout.removeVIEw(img); fogLayout.invalIDate(); // always true? Maybe but just check for for concurrency safe. if (setFogN(false) < MAX_CLOUDS_ON_SCREEN) { startFogGenerator(); } } @OverrIDe public voID onAnimationRepeat(Animation animation) { } }); int pxWIDth = Tools.topx(140,getResources()); // WIDth of layout container int paddingWIDth = Tools.topx(20,getResources()); int x = r.nextInt(pxWIDth - paddingWIDth - paddingWIDth) + paddingWIDth; int range = Tools.topx(50,getResources()); int wIDth; int height; if (showN1) { // nube01: 167x226 wIDth = r.nextInt(Tools.topx(167,getResources()) - range) + range; height= r.nextInt(Tools.topx(226,getResources()) - range) + range; } else { // nube01: 144x177 wIDth = r.nextInt(Tools.topx(144,getResources()) - range) + range; height= r.nextInt(Tools.topx(177,getResources()) - range) + range; } Log.d("Animation","X: " + x + ",WIDth: " + wIDth + ",Height: " + height); //img.setpadding(x,0); relativeLayout.LayoutParams params = new relativeLayout.LayoutParams(wIDth,height); params.leftmargin = x; fogLayout.addVIEw(img,params); img.setBackgroundcolor(color.argb(255,r.nextInt(255),r.nextInt(255))); // just for deBUG img.startAnimation(animation); setFogN(true); } },r.nextInt(2500 - 200) + 200);}private final static int MAX_CLOUDS_ON_SCREEN = 3;private AtomicInteger currentFogs = new AtomicInteger(0);private synchronized int setFogN(boolean increment) { int toReturn = increment ? currentFogs.incrementAndGet() : currentFogs.decrementAndGet(); Log.d("TeaAnim","ToReturn: "+ toReturn); return toReturn;} 工作正常但是当删除第3个视图并开始另一个时间时,它会崩溃并出现NullPointerException,可能是并发问题?我怎么解决它?
例外:
ERROR/AndroIDRuntime(10736): FATAL EXCEPTION: main java.lang.NullPointerException at androID.vIEw.VIEwGroup.dispatchDraw(VIEwGroup.java:2796) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12648) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12694) at androID.vIEw.VIEwGroup.dispatchGetdisplayList(VIEwGroup.java:2910) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12588) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12694) at androID.vIEw.VIEwGroup.dispatchGetdisplayList(VIEwGroup.java:2910) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12588) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12694) at androID.vIEw.VIEwGroup.dispatchGetdisplayList(VIEwGroup.java:2910) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12588) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12694) at androID.vIEw.VIEwGroup.dispatchGetdisplayList(VIEwGroup.java:2910) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12588) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12694) at androID.vIEw.VIEwGroup.dispatchGetdisplayList(VIEwGroup.java:2910) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12588) at androID.vIEw.VIEw.getdisplayList(VIEw.java:12694) at androID.vIEw.HarDWareRenderer$glrenderer.draw(HarDWareRenderer.java:1198) at androID.vIEw.VIEwRootImpl.draw(VIEwRootImpl.java:2173) at androID.vIEw.VIEwRootImpl.performDraw(VIEwRootImpl.java:2045) at androID.vIEw.VIEwRootImpl.performTraversals(VIEwRootImpl.java:1854) at androID.vIEw.VIEwRootImpl.doTraversal(VIEwRootImpl.java:989) at androID.vIEw.VIEwRootImpl$TraversalRunnable.run(VIEwRootImpl.java:4351) at androID.vIEw.Choreographer$CallbackRecord.run(Choreographer.java:749) at androID.vIEw.Choreographer.doCallbacks(Choreographer.java:562) at androID.vIEw.Choreographer.doFrame(Choreographer.java:532) at androID.vIEw.Choreographer$FramedisplayEventReceiver.run(Choreographer.java:735) at androID.os.Handler.handleCallback(Handler.java:725) at androID.os.Handler.dispatchMessage(Handler.java:92) at androID.os.Looper.loop(Looper.java:137) at androID.app.ActivityThread.main(ActivityThread.java:5204) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799) at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:566) at dalvik.system.NativeStart.main(Native Method)
笔记:
fogLayout是一个具有固定宽度和高度的relativeLayout(以dp为单位)
Tools.topx是一种从DP转换为PX的方法
handler.post(new Runnable() { public voID run() { fogLayout.removeVIEw(img); }}); 总结 以上是内存溢出为你收集整理的android – 添加/删除RelativeLayout视图时的NullPointerException(动画)全部内容,希望文章能够帮你解决android – 添加/删除RelativeLayout视图时的NullPointerException(动画)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)