android – 添加删除RelativeLayout视图时的NullPointerException(动画)

android – 添加删除RelativeLayout视图时的NullPointerException(动画),第1张

概述嗨,我想从下到上创建一个图像和动画,并将alpha从1.0更改为0.0.我有这个代码(我在onCreate方法中调用3次来制作3个动画图像): /** * Starts to make fog */private void startFogGenerator() { handler.postDelayed(new Runnable() { @Override 嗨,我想从下到上创建一个图像和动画,并将Alpha从1.0更改为0.0.我有这个代码(我在onCreate方法中调用3次来制作3个动画图像):
/** * 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(动画)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1140887.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存