首页 文章

将可拖动图像视图添加到现有相对视图

提问于
浏览
0

目前我有以下代码 . 它将imageview添加到现有背景中 . 但是在创建图像后,当我尝试拖动它时程序崩溃了...任何人都有任何想法为什么它不起作用?

ballbutton.setOnClickListener (new View.OnClickListener(){
        @Override
        public void onClick(View view){
            ImageView iv = new ImageView(getApplicationContext());
            iv.setImageDrawable(getDrawable(R.drawable.ball));
            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            lp.addRule(RelativeLayout.RIGHT_OF, R.id.resistorbutton);
            iv.setLayoutParams(lp);
            iv.setOnTouchListener(new myListener());
            relativeLayout.addView(iv);
        }
    });

日志如下:

---------崩溃的开始

E / AndroidRuntime:FATAL EXCEPTION:main进程:com.example.dan.ball,PID:2795 java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.view.ViewGroup.invalidate()' com.example.dan.circuit.ball $ myListener.onTouch(MainActivity.java:77)at android.view.View.dispatchTouchEvent(View.java:9290)at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)在Android.view上的android.view.View.View.View.StartEvent(ViewGroup.java:2197)上的android.view.ViewGroup.DispatchTransformedTouchEvent(ViewGroup.java:2553)上的android.view.View.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197) . 位于android.view.View.View.St.Ev(ViewGroup.java:2197)的android.view.View.St.EvatchTouchEvent(ViewGroup.java:257)处于android.view.ViewGroup.dispatchTouchEvent的ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) .java:2197)在com.android.internal.policy.PhoneWindow $ DecorView.superDispatchTouchEvent(PhoneW) indow.java:2403)在com.android.internal.policy.PhoneWindow的android.app.Activity.dispatchTouchEvent(Activity.java:2765)的com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737) android.view.ViewRootImpl $的android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230)上的$ DecorView.dispatchTouchEvent(PhoneWindow.java:2364)at android.view.View.dispatchPointerEvent(View.java:9514)在Android.view.ViewRootImpl上的android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3642)中的ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096)在android.view.ViewRootImpl上的android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3695)位于android.view上的android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:3787)的$ InputStage.forward(ViewRootImpl.java:3661)位于android.view的android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3669) . ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:3844)at android.view.ViewRootImpl $ InputStage.deliver(Vie wRootImpl.java:3642)在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3695)android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3661)at android.view.ViewRootImpl $ InputStage.apply (ViewRootImpl.java:3669)位于android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl . )的android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3642)android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5922) . java:5896)在android.view.View.InputEventReceiver.dispatchInputEvent的android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6025)上的android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5857)(InputEventReceiver.java:185 )android.o.MessageQueue.next(MessageQueue.java:323)的android.os.MessageQueue.nativePollOnce(Native Method)位于android.app.ActivityThread的android.os.Looper.loop(Looper.java:135) . main(ActivityThread.java:5417)位于com.android.internal.os.Zy的java.lang.reflect.Method.invoke(Native Method) goteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

1 回答

  • 0

    好的,所以我设法自己解决了这个问题 . 在我的myListener类中,我使用invalidate()来重绘我不需要的视图 .

相关问题