gpt4 book ai didi

java - 使 Canvas View 无效时单击按钮后应用程序崩溃(Android Studio,Java)

转载 作者:行者123 更新时间:2023-12-02 11:11:04 25 4
gpt4 key购买 nike

当我调用 invalidate() 刷新 View 时,我的应用程序在单击按钮后崩溃。我不明白为什么。如果我删除 canvasView.invalidate(),应用程序不会崩溃。是否允许从另一个类调用invalidate()?我是 Android Studio 的新手。当然,有人可以帮助我吗?编辑:问题已解决,答案如下,我添加了 LogCat。

这是代码:

public class MainActivity extends AppCompatActivity implements 
View.OnClickListener {

CanvasView canvasView;
Button btnChangeColor;
static boolean colorRed;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

CanvasView canvasView = new CanvasView(this, null);
btnChangeColor = (Button) findViewById(R.id.button);

btnChangeColor.setOnClickListener(this);

colorRed = false;

}

@Override
public void onClick(View v) {
if(colorRed) {
colorRed = false;
canvasView.invalidate();
return;
}

else {
colorRed = true;
canvasView.invalidate();
return;
}
}
}




class CanvasView extends View {

Paint paint;

public CanvasView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);

paint = new Paint();
}


@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

if(MainActivity.colorRed == true)
paint.setColor(Color.RED);
else
paint.setColor(Color.BLACK);

paint.setStyle(Paint.Style.FILL);

canvas.drawCircle(400, 400, 50, paint);
}
}

日志猫:

05-31 21:10:41.341 27902-27902/? I/art:后期启用 -Xcheck:jni 重新初始化属性:dalvik.vm.checkjni= false

05-31 21:10:41.351 27902-27909/? I/art:调试器不再处于 Activity 状态 启动阻塞 GC 仪器

05-31 21:10:41.425 27902-27902/? W/系统:类加载器引用未知路径:/data/app/com.example.andreas.drawing_exp-2/lib/arm64

05-31 21:10:41.433 27902-27902/? I/InstantRun:启动即时运行服务器:是主进程

05-31 21:10:41.450 27902-27902/? I/HwCust:为 android.app.HwCustActivityImpl 类找到构造函数

05-31 21:10:41.465 27902-27902/? I/HwCust:为 android.app.HwCustHwWallpaperManagerImpl 类找到构造函数

05-31 21:10:41.477 27902-27902/? W/art:在Android 4.1之前,方法 android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) 会有错误地重写了 android.graphics.drawable.Drawable 中的包私有(private)方法

05-31 21:10:41.533 27902-27913/? I/art:后台粘性并发标记清除 GC 释放了 2801(763KB) 个 AllocSpace 对象,0(0B) 个 LOS 对象,22% 空闲,3MB/4MB,暂停 5.329ms,总共 13.242ms

05-31 21:10:41.567 27902-27902/? W/VRSystemServiceManager:vr 服务不活动

05-31 21:10:41.568 27902-27902/? I/HwSecImmHelper:mSecurityInputMethodService 为空

05-31 21:10:41.571 27902-27902/? I/HwPointEventFilter:支持AFT

05-31 21:10:41.615 27902-27922/? I/OpenGLRenderer:初始化的 EGL,版本 1.4

05-31 21:10:41.621 27902-27922/? W/链接器:/vendor/lib64/libhwuibp.so:未使用的 DT 条目:类型 0xf arg 0xe3a

05-31 21:10:41.629 27902-27902/? W/art:在 Android 4.1 之前,方法 int android.support.v7.widget.DropDownListView.lookForSelectablePosition(int, boolean) 会错误地覆盖 android.widget.ListView 中的包私有(private)方法

05-31 21:10:48.728 27902-27902/com.example.andreas.drawing_exp I/hwaps: JNI_OnLoad

05-31 21:10:48.802 27902-27902/com.example.andreas.drawing_exp E/AndroidRuntime:致命异常:main 进程:com.example.andreas.drawing_exp,PID:27902 java.lang.NullPointerException:尝试从空对象引用上的字段“boolean com.example.andreas.drawing_exp.CanvasView.colorRed”读取 在 com.example.andreas.drawing_exp.MainActivity.onClick(MainActivity.java:37) 在 android.view.View.performClick(View.java:5646) 在 android.view.View$PerformClick.run(View.java:22473) 在 android.os.Handler.handleCallback(Handler.java:761) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:156) 在 android.app.ActivityThread.main(ActivityThread.java:6523) 在 java.lang.reflect.Method.invoke( native 方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)

05-31 21:10:48.837 27902-27902/com.example.andreas.drawing_exp I/Process:发送信号。 PID:27902 SIG:9

最佳答案

您错误地使用了invalidate()

这必须从 UI 线程调用。要从非 UI 线程调用,请调用 postInvalidate()

您可以使用 postInvalidate() 来执行此操作。

关于java - 使 Canvas View 无效时单击按钮后应用程序崩溃(Android Studio,Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50615609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com