GVKun编程网logo

WPF绑定Canvas.Left / Canvas.Top到Point DependencyProperty,使用PointAnimation(wpf绑定对象)

14

对于想了解WPF绑定Canvas.Left/Canvas.Top到PointDependencyProperty,使用PointAnimation的读者,本文将是一篇不可错过的文章,我们将详细介绍wp

对于想了解WPF绑定Canvas.Left / Canvas.Top到Point DependencyProperty,使用PointAnimation的读者,本文将是一篇不可错过的文章,我们将详细介绍wpf绑定对象,并且为您提供关于android Conflict with dependency 'com.android.support:support-annotations' in project ':app'.、Android 构建失败,使用 AS 2020.3.1 和 Compose 1.0.0 InstantiationError 或 NoClassDefFoundError: WrappedSimpleFunctionDescriptor、android-Canvas中的java.lang.UnsupportedOperationException、android-NullPointerException在lockCanvas()的有价值信息。

本文目录一览:

WPF绑定Canvas.Left / Canvas.Top到Point DependencyProperty,使用PointAnimation(wpf绑定对象)

WPF绑定Canvas.Left / Canvas.Top到Point DependencyProperty,使用PointAnimation(wpf绑定对象)

请考虑以下简化的例子来说明我的问题:

MainWindow.xaml

<Window x:xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="500" Height="500" Title="Click anywhere to animate the movement of the blue thingy..."> <Canvas x:Name="canvas" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="AntiqueWhite" MouseDown="canvas_MouseDown" /> </Window>

MainWindow.xaml.cs

using System; using System.Windows; using System.Windows.Input; using System.Windows.Media.Animation; namespace WpfApplication1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.canvas.Children.Add(new Thingy()); } private void canvas_MouseDown(object sender,MouseButtonEventArgs e) { var thingy = (Thingy)this.canvas.Children[0]; var from = new Point(0.0,0.0); var to = new Point( canvas.ActualWidth - thingy.ActualWidth,canvas.ActualHeight - thingy.ActualHeight ); var locAnim = new PointAnimation( from,to,new Duration(TimeSpan.FromSeconds(5)) ); locAnim.Completed += (s,a) => { // Only at this line does the thingy move to the // correct position... thingy.Location = to; }; thingy.Location = from; thingy.BeginAnimation(Thingy.LocationProperty,locAnim); } } }

Thingy.xaml

添加应用程序清单以确保在Windows XP,Vista和7上提升权限的可靠程度如何?

C#窗体不呈现控件

stringinput从文本框if / else

我有什么select使用C#在Windows Server上添加和删除IPSec策略?

如果外部命令的输出是废话,最好抛出exception?

<UserControl x:xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="50" Height="50" Background="Blue" />

Thingy.xaml.cs

using System.Windows; using System.Windows.Controls; using System.Windows.Data; namespace WpfApplication1 { public partial class Thingy : UserControl { public static DependencyProperty LocationProperty = DependencyProperty.Register( "Location",typeof(Point),typeof(Thingy) ); public Thingy() { InitializeComponent(); Canvas.SetLeft(this,0.0); Canvas.SetTop(this,0.0); var xBind = new Binding(); xBind.source = this; xBind.Path = new PropertyPath(Canvas.LeftProperty); xBind.Mode = BindingMode.TwoWay; var yBind = new Binding(); yBind.source = this; yBind.Path = new PropertyPath(Canvas.TopProperty); yBind.Mode = BindingMode.TwoWay; var locBind = new MultiBinding(); locBind.Converter = new PointConverter(); locBind.Mode = BindingMode.TwoWay; locBind.Bindings.Add(xBind); locBind.Bindings.Add(yBind); BindingOperations.SetBinding( this,Thingy.LocationProperty,locBind ); } public Point Location { get { return (Point)this.GetValue(LocationProperty); } set { this.SetValue(LocationProperty,value); } } } }

PointConverter.cs

using System; using System.Globalization; using System.Windows; using System.Windows.Data; namespace WpfApplication1 { public class PointConverter : IMultiValueConverter { public object Convert(object[] v,Type t,object p,CultureInfo c) { return new Point((double)v[0],(double)v[1]); } public object[] ConvertBack(object v,Type[] t,CultureInfo c) { return new object[] { ((Point)v).X,((Point)v).Y }; } } }

这里的目标是:

使用LocationProperty来操作和访问Canvas.LeftProperty和Canvas.TopProperty值。

用PointAnimation类animation说LocationProperty 。

目标1似乎工作正常,只有在试图animation化LocationProperty ,它不会像预期的那样运行。

“预期”是指Thingy的实例应该随着animation的进展而移动。

我能够使用DoubleAnimation类的两个实例来完成此操作。

如果问题是Point是一个值types,那么我怀疑我可以定义我自己的Pointtypes和我自己的AnimationTimeline 。 这不是我想要做的。 这是一个更大的项目的一部分, LocationProperty将用于其他事情。

说实话,底线是,在我看来,这应该只是工作,你能告诉我:

为什么不呢?

如果有解决问题的定义?

我还会提到,我针对这个项目的.Net Framework 4.5。

谢谢。

从所有当前暂停的线程获取堆栈跟踪信息(托pipe)

Windows Azure支持除.NET以外的其他技术

Windows句柄如果控件设置为可见= false(.NET)

尝试安装Windows服务时,InstallUtil.exe被删除

微软打破了.NET兼容性?

这是最简单的代码来动画的东西。

它利用依赖属性回调

不使用绑定

不使用转换器

不使用故事板

主窗口:

using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media.Animation; namespace WpfApplication1 { public partial class MainWindow { public MainWindow() { InitializeComponent(); } private void MainWindow_OnMouseDown(object sender,MouseButtonEventArgs e) { var x = Canvas.GetLeft(Control1); var y = Canvas.GetTop(Control1); x = double.IsNaN(x) ? 0 : x; y = double.IsNaN(y) ? 0 : y; var point1 = new Point(x,y); var point2 = e.GetPosition(this); var animation = new PointAnimation(point1,point2,new Duration(TimeSpan.FromSeconds(1))); animation.EasingFunction = new CubicEase(); Control1.BeginAnimation(UserControl1.LocationProperty,animation); } } }

主窗口:

<Window x:xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication1" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525" MouseDown="MainWindow_OnMouseDown"> <Canvas> <local:UserControl1 Background="Red" Height="100" Width="100" x:Name="Control1" /> </Canvas> </Window>

控制:

using System.Windows; using System.Windows.Controls; namespace WpfApplication1 { public partial class UserControl1 { public static readonly DependencyProperty LocationProperty = DependencyProperty.Register( "Location",typeof(UserControl1),new UIPropertyMetadata(default(Point),OnLocationChanged)); public UserControl1() { InitializeComponent(); } public Point Location { get { return (Point) GetValue(LocationProperty); } set { SetValue(LocationProperty,value); } } private static void OnLocationChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) { var control1 = (UserControl1) d; var value = (Point) e.NewValue; Canvas.SetLeft(control1,value.X); Canvas.SetTop(control1,value.Y); } } }

控制:

<UserControl x:xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WpfApplication1" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> </UserControl>

Todo:根据您的需要调整代码:)

编辑:一个简单的双向绑定,听Canvas.[Left|Top]Property :

(待加强)

using System; using System.ComponentModel; using System.Windows; using System.Windows.Controls; namespace WpfApplication1 { public partial class UserControl1 { public static readonly DependencyProperty LocationProperty = DependencyProperty.Register( "Location",new PropertyMetadata(default(Point),OnLocationChanged)); public UserControl1() { InitializeComponent(); DependencyPropertyDescriptor.FromProperty(Canvas.LeftProperty,typeof(Canvas)) .AddValueChanged(this,OnLeftChanged); DependencyPropertyDescriptor.FromProperty(Canvas.TopProperty,OnTopChanged); } public Point Location { get { return (Point) GetValue(LocationProperty); } set { SetValue(LocationProperty,value); } } private void OnLeftChanged(object sender,EventArgs eventArgs) { var left = Canvas.GetLeft(this); Location = new Point(left,Location.Y); } private void OnTopChanged(object sender,EventArgs e) { var top = Canvas.GetTop(this); Location = new Point(Location.X,top); } private static void OnLocationChanged(DependencyObject d,value.Y); } } }

我喜欢Aybe的答案,但它没有解释为什么原始代码不起作用。 我运行你的代码,并尝试了一些替代方法,看来发生了什么事是绑定转换器在动画过程中被忽略。 如果您在转换器方法中设置断点,或者执行Debug.WriteLine,则无论哪种方式,您都可以看到转换器不会在整个动画中被调用,而只是在您的代码中明确设置属性时。

深入挖掘,问题在于您设置Thingy绑定的方式。 绑定属性应该是Thingy.Location而目标属性应该是Canvas.Left和Canvas.Top 。 你有倒退 – 你正在使Canvas.Left和Canvas.Top源属性和Thingy.Location目标属性。 您可能会认为将其设置为双向绑定可以使其工作(并且在您明确设置Thingy.Location属性时),但是看起来双向绑定方面在动画中将被忽略。

一个解决方案是不要在这里使用多重绑定。 当多个属性被多个属性或条件所取代时,多重绑定是真正的。 在这里,你有多个属性( Canvas.Left和Canvas.Top ),你想用一个属性来源 – Thingy.Location 。 所以,在Thingy构造函数中:

var xBind = new Binding(); xBind.source = this; xBind.Path = new PropertyPath(Thingy.LocationProperty); xBind.Mode = BindingMode.OneWay; xBind.Converter = new PointTodoubleConverter(); xBind.ConverterParameter = false; BindingOperations.SetBinding(this,Canvas.LeftProperty,xBind); var yBind = new Binding(); yBind.source = this; yBind.Path = new PropertyPath(Thingy.LocationProperty); yBind.Mode = BindingMode.OneWay; yBind.Converter = new PointTodoubleConverter(); yBind.ConverterParameter = true; BindingOperations.SetBinding(this,Canvas.TopProperty,yBind);

另一个区别是绑定转换器。 而不是采取两个doubles ,给你一个Point ,我们需要一个转换器,需要一个Point并提取用于Canvas.Left和Canvas.Top属性(我使用ConverterParameter指定哪一个是所需的)的双。 所以:

public class PointTodoubleConverter : IValueConverter { public object Convert(object value,Type targettype,object parameter,CultureInfo culture) { var pt = (Point)value; bool isY = (bool)parameter; return isY ? pt.Y : pt.X; } public object ConvertBack(object value,CultureInfo culture) { return value; } }

这使得动画工作,同时仍然使用绑定和转换器。 唯一的缺点是Canvas属性和Thingy.Location之间的绑定必须是单向的,因为没有办法将Canvas.Left或Canvas.Top单独转换回完整的Point 。 换句话说,如果您随后更改Canvas.Left或Canvas.Top , Thingy.Location将不会更新。 (这当然也适用于任何无约束的解决方案)。

但是,如果你回到原来的多重绑定版本,只需将代码添加到Location属性更改处理程序来更新Canvas.Left和Canvas.Top ,就可以拥有你的蛋糕并且可以吃掉它。 他们不需要在这一点上是TwoWay绑定,因为你正在更新Location的属性更改处理程序中的Canvas.Left和Canvas.Top 。 基本上所有的实际绑定然后是确保Canvas.Left和Canvas.Top做的Location更新。

无论如何,这个谜还是解决了为什么你原来的方法不起作用。 设置复杂绑定时,正确识别源和目标是至关重要的。 TwoWay绑定并不是所有情况下的全部,特别是动画。

android Conflict with dependency 'com.android.support:support-annotations' in project ':app'.

android Conflict with dependency 'com.android.support:support-annotations' in project ':app'.

如题所示 只是新建了一个项目就报这个错了。

问题 以后解决了如下:


这样就可以了。但是原因了我还是不知道。我也没有修改或者升级什么东西。。知道原因的大佬请告知一下。

转载自:https://blog.csdn.net/qq_33313551/article/details/80240332


Android 构建失败,使用 AS 2020.3.1 和 Compose 1.0.0 InstantiationError 或 NoClassDefFoundError: WrappedSimpleFunctionDescriptor

Android 构建失败,使用 AS 2020.3.1 和 Compose 1.0.0 InstantiationError 或 NoClassDefFoundError: WrappedSimpleFunctionDescriptor

如何解决Android 构建失败,使用 AS 2020.3.1 和 Compose 1.0.0 InstantiationError 或 NoClassDefFoundError: WrappedSimpleFunctionDescriptor?

升级到新的 Android Studio 2020.3.1(稳定版)和 Compose 1.0.0(稳定版)。在构建我的分支时,根据我设置的 Kotlin 版本,我遇到了两个复杂问题之一。

常见的build.gradle:

    baseDependencies = [
            minSdkVersion     : 26,compileSdkVersion : 30,buildToolsversion : "31.0.0"
   ]

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
buildscript {
    ext {
        gms_version = "4.3.5"
        agp_version = ''7.0.0''
        ktlint_version = "10.0.0"
        kotlin_version = "x.x.x"
        detekt_version = "1.16.0"
        versions_version = "0.36.0"
        dagger_version = "2.37"
        crashlytics_gradle_version = "2.5.2"
        SceneForm_version = "1.17.1"
        nav_version = "2.3.5"
        compose_version = "1.0.0"
        datastore_version = "1.0.0-beta01"
        protobuf_version = "3.10.0"
    }
    repositories {
        google()
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath "com.android.tools.build:gradle:$agp_version"
        classpath "com.google.gms:google-services:$gms_version"
        classpath "org.jlleitschuh.gradle:ktlint-gradle:$ktlint_version"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "com.google.dagger:hilt-android-gradle-plugin:$dagger_version"
        classpath "com.github.ben-manes:gradle-versions-plugin:$versions_version"
        classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$detekt_version"
        classpath "com.google.firebase:firebase-crashlytics-gradle:$crashlytics_gradle_version"
        classpath "com.google.ar.SceneForm:plugin:$SceneForm_version"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }

    kotlinoptions {
        jvmTarget = JavaVersion.VERSION_11
        useIR = true
    }

Android Studio 当前 Kotlin 插件版本:203-1.5.21-release-328-AS7717.8

当 Kotlin 版本设置为 1.5.21 时,会生成以下堆栈跟踪:

java.lang.InstantiationError: org.jetbrains.kotlin.ir.util.TypeTranslator
    at androidx.compose.compiler.plugins.kotlin.lower.AbstractComposeLowering.<init>(AbstractComposeLowering.kt:174)
    at androidx.compose.compiler.plugins.kotlin.lower.ClassstabilityTransformer.<init>(ClassstabilityTransformer.kt:61)
    at androidx.compose.compiler.plugins.kotlin.ComposeIrGenerationExtension.generate(ComposeIrGenerationExtension.kt:68)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr$lambda-1(JvmIrCodegenFactory.kt:126)
    at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:89)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr(JvmIrCodegenFactory.kt:146)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr$default(JvmIrCodegenFactory.kt:64)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModule(JvmIrCodegenFactory.kt:59)
    at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.generate(KotlinToJVMBytecodeCompiler.kt:618)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:211)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:154)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:169)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:90)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98)
    at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runcompiler(IncrementalJvmCompilerRunner.kt:386)
    at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runcompiler(IncrementalJvmCompilerRunner.kt:110)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:303)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl$rebuild(IncrementalCompilerRunner.kt:99)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:124)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:74)
    at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:607)
    at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:96)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1659)
    at jdk.internal.reflect.GeneratedMethodAccessor108.invoke(UnkNown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

当使用 Koltin 版本 1.5.10 时,会生成此堆栈跟踪:

java.lang.NoClassDefFoundError: org/jetbrains/kotlin/ir/descriptors/WrappedSimpleFunctionDescriptor
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.buildFunction(LiveLiteralTransformer.kt:842)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.irLiveLiteralGetter(LiveLiteralTransformer.kt:933)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.visitConst(LiveLiteralTransformer.kt:426)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitConst(IrElementTransformerVoid.kt:138)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitConst(IrElementTransformerVoid.kt:24)
    at org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl.accept(IrConstImpl.kt:33)
    at org.jetbrains.kotlin.ir.expressions.IrExpression.transform(IrExpression.kt:33)
    at org.jetbrains.kotlin.ir.expressions.IrExpressionBody.transformChildren(IrBody.kt:46)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitBody(IrElementTransformerVoid.kt:108)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitExpressionBody(IrElementTransformerVoid.kt:114)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitExpressionBody(IrElementTransformerVoid.kt:115)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitExpressionBody(IrElementTransformerVoid.kt:24)
    at org.jetbrains.kotlin.ir.expressions.IrExpressionBody.accept(IrBody.kt:36)
    at org.jetbrains.kotlin.ir.expressions.IrExpressionBody.transform(IrBody.kt:39)
    at org.jetbrains.kotlin.ir.declarations.IrField.transformChildren(IrField.kt:42)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitDeclaration(IrElementTransformerVoid.kt:57)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitField(IrElementTransformerVoid.kt:81)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitField(IrElementTransformerVoid.kt:82)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitField(IrElementTransformerVoid.kt:24)
    at org.jetbrains.kotlin.ir.declarations.IrField.accept(IrField.kt:35)
    at org.jetbrains.kotlin.ir.IrElement$DefaultImpls.transform(IrElement.kt:32)
    at org.jetbrains.kotlin.ir.IrElementBase.transform(IrElementBase.kt:19)
    at org.jetbrains.kotlin.ir.util.TransformKt.transformInPlace(transform.kt:35)
    at org.jetbrains.kotlin.ir.declarations.IrClass.transformChildren(IrClass.kt:67)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitDeclaration(IrElementTransformerVoid.kt:57)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitClass(IrElementTransformerVoid.kt:66)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.access$visitClass$s1031542550(LiveLiteralTransformer.kt:158)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer$visitClass$1.invoke(LiveLiteralTransformer.kt:450)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer$visitClass$1.invoke(LiveLiteralTransformer.kt:158)
    at androidx.compose.compiler.plugins.kotlin.lower.Durablekeyvisitor.siblings(Durablekeyvisitor.kt:117)
    at androidx.compose.compiler.plugins.kotlin.lower.Durablekeyvisitor$siblings$1.invoke(Durablekeyvisitor.kt:131)
    at androidx.compose.compiler.plugins.kotlin.lower.Durablekeyvisitor.enter(Durablekeyvisitor.kt:96)
    at androidx.compose.compiler.plugins.kotlin.lower.Durablekeyvisitor.siblings(Durablekeyvisitor.kt:131)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.siblings(LiveLiteralTransformer.kt:192)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.visitClass(LiveLiteralTransformer.kt:449)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitClass(IrElementTransformerVoid.kt:67)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitClass(IrElementTransformerVoid.kt:24)
    at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:56)
    at org.jetbrains.kotlin.ir.IrElement$DefaultImpls.transform(IrElement.kt:32)
    at org.jetbrains.kotlin.ir.IrElementBase.transform(IrElementBase.kt:19)
    at org.jetbrains.kotlin.ir.util.TransformKt.transformInPlace(transform.kt:35)
    at org.jetbrains.kotlin.ir.declarations.IrClass.transformChildren(IrClass.kt:67)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitDeclaration(IrElementTransformerVoid.kt:57)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitClass(IrElementTransformerVoid.kt:66)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.access$visitClass$s1031542550(LiveLiteralTransformer.kt:158)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer$visitClass$1.invoke(LiveLiteralTransformer.kt:450)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer$visitClass$1.invoke(LiveLiteralTransformer.kt:158)
    at androidx.compose.compiler.plugins.kotlin.lower.Durablekeyvisitor.siblings(Durablekeyvisitor.kt:117)
    at androidx.compose.compiler.plugins.kotlin.lower.Durablekeyvisitor$siblings$1.invoke(Durablekeyvisitor.kt:131)
    at androidx.compose.compiler.plugins.kotlin.lower.Durablekeyvisitor.enter(Durablekeyvisitor.kt:96)
    at androidx.compose.compiler.plugins.kotlin.lower.Durablekeyvisitor.siblings(Durablekeyvisitor.kt:131)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.siblings(LiveLiteralTransformer.kt:192)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.visitClass(LiveLiteralTransformer.kt:449)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitClass(IrElementTransformerVoid.kt:67)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitClass(IrElementTransformerVoid.kt:24)
    at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:56)
    at org.jetbrains.kotlin.ir.IrElement$DefaultImpls.transform(IrElement.kt:32)
    at org.jetbrains.kotlin.ir.IrElementBase.transform(IrElementBase.kt:19)
    at org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl.transformChildren(IrFileImpl.kt:71)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitPackageFragment(IrElementTransformerVoid.kt:41)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitFile(IrElementTransformerVoid.kt:47)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.access$visitFile$s1031542550(LiveLiteralTransformer.kt:158)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer$visitFile$1.invoke(LiveLiteralTransformer.kt:496)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer$visitFile$1.invoke(LiveLiteralTransformer.kt:158)
    at androidx.compose.compiler.plugins.kotlin.lower.Durablekeyvisitor.siblings(Durablekeyvisitor.kt:117)
    at androidx.compose.compiler.plugins.kotlin.lower.Durablekeyvisitor.root(Durablekeyvisitor.kt:152)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.visitFile(LiveLiteralTransformer.kt:463)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitFile(IrElementTransformerVoid.kt:48)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitFile(IrElementTransformerVoid.kt:24)
    at org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl.accept(IrFileImpl.kt:63)
    at org.jetbrains.kotlin.ir.declarations.IrFile.transform(IrFile.kt:48)
    at org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl.transformChildren(IrModuleFragmentImpl.kt:45)
    at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoidKt.transformChildrenVoid(IrElementTransformerVoid.kt:330)
    at androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer.lower(LiveLiteralTransformer.kt:169)
    at androidx.compose.compiler.plugins.kotlin.ComposeIrGenerationExtension.generate(ComposeIrGenerationExtension.kt:80)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory$convertToIr$1.invoke(JvmIrCodegenFactory.kt:120)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory$convertToIr$1.invoke(JvmIrCodegenFactory.kt:116)
    at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:91)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr(JvmIrCodegenFactory.kt:140)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr$default(JvmIrCodegenFactory.kt:66)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModule(JvmIrCodegenFactory.kt:61)
    at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.generate(KotlinToJVMBytecodeCompiler.kt:592)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:212)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:155)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:169)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:88)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98)
    at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runcompiler(IncrementalJvmCompilerRunner.kt:386)
    at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runcompiler(IncrementalJvmCompilerRunner.kt:110)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:303)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl$rebuild(IncrementalCompilerRunner.kt:99)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:124)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:74)
    at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:607)
    at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:96)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1659)
    at jdk.internal.reflect.GeneratedMethodAccessor104.invoke(UnkNown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.classNotFoundException: org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor
    at java.base/java.net.urlclassloader.findClass(urlclassloader.java:471)
    at java.base/java.lang.classLoader.loadClass(ClassLoader.java:589)
    at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522)
    ... 115 more

我也尝试回到 Kotlin 版本 1.4.32,结果如下:

org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during IR lowering
File being compiled: /Users/pc15144/GitRepos/Neal-Android/libs/commonui/library/src/main/java/com/bose/mobile/commonui/ui/compose/CommonCheckBoxRow.kt
The root cause java.lang.NullPointerException was thrown at: org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.InlineClassAbi.getUnderlyingType(InlineClassAbi.kt:61)
    at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException(CodegenUtil.kt:239)
    at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException$default(CodegenUtil.kt:235)
    at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(PhaseBuilders.kt:124)
    at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(PhaseBuilders.kt:112)
    at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:94)
    at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:30)
    at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:94)
    at org.jetbrains.kotlin.backend.common.phaser.CompilerPhaseKt.invoketoplevel(CompilerPhase.kt:41)
    at org.jetbrains.kotlin.backend.jvm.JvmLower.lower(JvmLower.kt:407)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.doGenerateFilesInternal$backend_jvm(JvmIrCodegenFactory.kt:147)
    at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModule(JvmIrCodegenFactory.kt:120)
    at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.generate(KotlinToJVMBytecodeCompiler.kt:595)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:211)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:154)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:169)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:88)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98)

我错过了什么魔法?

解决方法

Android Studio 当前 Kotlin 插件版本:203-1.5.21-release-328-AS7717.8

将其更改为 1.5.10。

android-Canvas中的java.lang.UnsupportedOperationException

android-Canvas中的java.lang.UnsupportedOperationException

我在应用程序中使用了自定义ImageView.但这表明

java.lang.UnsupportedOperationException

在代码canvas.clipPath(clipPath)中.

我不知道为什么会收到这个错误.它在某些手机上可以完美运行.

public class Gma_CustomImage2 extends ImageView {

    public static float radius = 10.0f;  

    public Gma_CustomImage2(Context context) {
        super(context);
    }

    public Gma_CustomImage2(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public Gma_CustomImage2(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        Path clipPath = new Path();
        RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight()+13.0f);
        clipPath.addRoundRect(rect, radius, radius, Path.Direction.CW);
        canvas.clipPath(clipPath);
        super.onDraw(canvas);
    }
}

LogCat

08-08 12:04:47.963: E/AndroidRuntime(5710): FATAL EXCEPTION: main
08-08 12:04:47.963: E/AndroidRuntime(5710): java.lang.UnsupportedOperationException
08-08 12:04:47.963: E/AndroidRuntime(5710):     at    android.view.GLES20Canvas.clipPath(GLES20Canvas.java:408)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at com.example.meetap.Gma_CustomImage2.onDraw(Gma_CustomImage2.java:34)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.draw(View.java:10982)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.getdisplayList(View.java:10421)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.dispatchGetdisplayList(ViewGroup.java:2597)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.getdisplayList(View.java:10384)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.dispatchGetdisplayList(ViewGroup.java:2597)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.getdisplayList(View.java:10384)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.dispatchGetdisplayList(ViewGroup.java:2597)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.getdisplayList(View.java:10384)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.draw(View.java:10985)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.widget.FrameLayout.draw(FrameLayout.java:450)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.widget.ScrollView.draw(ScrollView.java:1524)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.getHardwareLayer(View.java:10220)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.drawChild(ViewGroup.java:2863)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at com.example.meetap.Gma_CustomViewBehind.dispatchDraw(Gma_CustomViewBehind.java:121)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.getdisplayList(View.java:10419)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.getdisplayList(View.java:10419)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.dispatchGetdisplayList(ViewGroup.java:2597)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.getdisplayList(View.java:10384)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.dispatchGetdisplayList(ViewGroup.java:2597)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.getdisplayList(View.java:10384)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewGroup.dispatchGetdisplayList(ViewGroup.java:2597)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.View.getdisplayList(View.java:10384)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.HardwareRenderer$glrenderer.draw(HardwareRenderer.java:842)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewRootImpl.draw(ViewRootImpl.java:1935)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1659)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2467)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.os.Looper.loop(Looper.java:137)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at android.app.ActivityThread.main(ActivityThread.java:4424)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at java.lang.reflect.Method.invokeNative(Native Method)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at java.lang.reflect.Method.invoke(Method.java:511)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-08 12:04:47.963: E/AndroidRuntime(5710):     at dalvik.system.NativeStart.main(Native Method)

解决方法:

使用此代码:

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
   Gma_CustomImage.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

android-NullPointerException在lockCanvas()

android-NullPointerException在lockCanvas()

我正在为Android开发一个小游戏(测试),但我不了解使用SurfaceView制作好的Timer线程的逻辑.

我遇到了[SurfaceView对象] .getHolder().lockCanvas(null)的问题.问题在于lockCanvas返回的值无效(在这种情况下为null).

我无法捕获此异常,因为我…不能! :/

这是我的代码:

package game;

import game.logics.SceneGroup;
import game.scenes.TeamScene;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;

// Definição da Atividade
public class GameActivity extends Activity {
    // Definição do Ambiente
    public class GameSurface extends SurfaceView
                                     implements SurfaceHolder.Callback {
        public GameSurface(final Context context) {
            super(context);

            this.getHolder().addCallback(this);
            this.setFocusable(true);
        }

        @Override
        public void surfaceChanged(final SurfaceHolder arg0,
                        final int arg1, final int arg2, final int arg3) {}

        @Override
        public void surfaceCreated(final SurfaceHolder arg0) {
            GameActivity.this.running = true;
        }

        @Override
        public void surfaceDestroyed(final SurfaceHolder arg0) {
            GameActivity.this.running = false;
        }

        public void update(final Canvas canvas) {
            GameActivity.this.scenes.update(canvas);
        }
    }

    class GaMetask extends TimerTask {
        @Override
        public void run() {
            if(GameActivity.this.running == false) {
                return;
            }

            final SurfaceHolder holder = 
                                GameActivity.this.surface.getHolder();

            Canvas canvas = null;
            try {
                canvas = holder.lockCanvas();
                canvas.drawColor(Color.BLACK);

                synchronized(holder) {
                    GameActivity.this.surface.update(canvas);
                }
            }
            finally {
                if(canvas != null) {
                    holder.unlockCanvasAndPost(canvas);
                }
            }
        }
    }

    private GameSurface     surface;
    private SceneGroup      scenes;

    private Timer           timer;
    private TimerTask       task;
    private boolean         running = false;

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.requestwindowFeature(Window.FEATURE_NO_TITLE);
        this.getwindow().setFlags(
                            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

        // ### SOLVE: PROBLEM START HERE ###
        this.surface = new GameSurface(this);

        this.scenes = new SceneGroup(this);
        this.scenes.add(new TeamScene(this));

        this.timer = new Timer();
        this.task = new GaMetask();

        // ### SOLVE: PROBLEM END HERE ###
        // ### Invalid new instance of GameSurface ###
        this.setContentView(new GameSurface(this));
    }

    @Override
    public void onPause() {
        super.onPause();
        this.timer.cancel();
    }

    @Override
    public void onResume() {
        super.onResume();
        this.timer.scheduleAtFixedrate(this.task, 0, 33);
    }
}

我做对了吗?
我该如何解决我的代码?

解决方法:

您正在两次创建GameSurface.

曾经在这里:

this.surface = new GameSurface(this);

再次在这里:

this.setContentView(new GameSurface(this));

大概他们应该是同一个人吗?

今天的关于WPF绑定Canvas.Left / Canvas.Top到Point DependencyProperty,使用PointAnimationwpf绑定对象的分享已经结束,谢谢您的关注,如果想了解更多关于android Conflict with dependency 'com.android.support:support-annotations' in project ':app'.、Android 构建失败,使用 AS 2020.3.1 和 Compose 1.0.0 InstantiationError 或 NoClassDefFoundError: WrappedSimpleFunctionDescriptor、android-Canvas中的java.lang.UnsupportedOperationException、android-NullPointerException在lockCanvas()的相关知识,请在本站进行查询。

本文标签: