- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个自定义属性,专门用于保存我的一个项目需要 invalidate() 调用的 View 属性:
class InvalidatingProperty<T>(private var _value: T) {
operator fun getValue(thisRef: View, property: KProperty<*>): T {
return _value
}
operator fun setValue(thisRef: View, property: KProperty<*>, value: T) {
_value = value
thisRef.invalidate()
}
}
在另一个项目中,我想重用我以前的一些工作,所以我将 View 及其依赖项(包括 InvalidatingProperty)复制到一个新项目中。但是在新项目中,使用 InvalidatingProperty 会导致预览渲染失败,并出现以下异常:
java.lang.NoSuchMethodError: kotlin.jvm.internal.MutablePropertyReference1Impl.<init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
at com.gradesimulator.views.SummaryView.<clinit>(SummaryView.kt)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:403)
at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:186)
at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:144)
at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:309)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:416)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:427)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:331)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1123)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1097)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
at android.view.LayoutInflater.inflate(LayoutInflater.java:501)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:348)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:404)
at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:141)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:678)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$8(RenderTask.java:809)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
源项目(预览工作的地方)和目标项目,都有相同的 android 版本 - 4.0.1,使用相同版本的 kotlin 和 kotlin gradle 插件 - 1.4.0
java.lang.NoClassDefFoundError: Could not initialize class com.gradesimulator.views.SummaryView
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:403)
at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:186)
at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:144)
at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:309)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:416)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:427)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:331)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1123)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1097)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
at android.view.LayoutInflater.inflate(LayoutInflater.java:501)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:348)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:404)
at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:141)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:678)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$8(RenderTask.java:809)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
压缩摘要查看代码:
@Suppress("MemberVisibilityCanBePrivate", "unused", "PropertyName")
class SummaryView : View {
companion object {
private const val TAG = "SummaryView"
//primary circle
const val DEFAULT_PRIMARY_CIRCLE_RADIUS_SCALE: Float = 1F
const val DEFAULT_PRIMARY_CIRCLE_DISPLACEMENT: Float = 0.3F
//secondary circle
const val DEFAULT_SECONDARY_CIRCLE_RADIUS_SCALE: Float = 1F
const val DEFAULT_ANIMATE_IN_SECONDARY_CIRCLE_DELAY: Long = 100
const val DEFAULT_SECONDARY_CIRCLE_DISPLACEMENT: Float = 0.2F
//both circles
const val DEFAULT_CIRCLES_SHADOW_RADIUS: Float = 0F
const val DEFAULT_CIRCLES_SHADOW_DISPLACEMENT: Float = 0F
const val DEFAULT_ANIMATE_IN_CIRCLES_ANIMATION_DURATION: Long = 600
//bigAverage
const val DEFAULT_BIG_AVERAGE_SHADOW_DISPLACEMENT_X: Float = 0F
const val DEFAULT_BIG_AVERAGE_SHADOW_DISPLACEMENT_Y: Float = 0F
const val DEFAULT_BIG_AVERAGE_SHADOW_RADIUS: Float = 0F
//smallAverage
const val DEFAULT_SMALL_AVERAGE_SHADOW_DISPLACEMENT_X: Float = 0F
const val DEFAULT_SMALL_AVERAGE_SHADOW_DISPLACEMENT_Y: Float = 0F
const val DEFAULT_SMALL_AVERAGE_SHADOW_RADIUS: Float = 0F
//average
const val DEFAULT_AVERAGE_MARGIN: Float = 0.4F
//progressArc
const val DEFAULT_ANIMATE_IN_PROGRESS_ARC_ANIMATION_DURATION: Long = 1200
const val DEFAULT_PROGRESS_ARC_MARGIN: Float = 0.2F
const val DEFAULT_PROGRESS_ARC_WIDTH: Float = 0.1F
const val DEFAULT_PROGRESS_ARC_START_ANGLE: Float = 10F
const val DEFAULT_PROGRESS_ARC_VALUE: Float = 0.96F
//progressArcDot
const val DEFAULT_PROGRESS_ARC_DOT_RADIUS: Float = 1.5F
//progressArcContent
const val PROGRESS_ARC_CONTENT_DEFAULT_MARGIN = 0.4F
const val DEFAULT_PROGRESS_ARC_CONTENT_TEXT = "Of the success!"
const val DEFAULT_PROGRESS_ARC_CONTENT_INTERLINE = 0.1F
const val PARTICLE_DATA_REGEX = ";"
}
//primaryCircle
val DEFAULT_PRIMARY_CIRCLE_COLOR: Int = Color.GRAY
//SecondaryCircle
val DEFAULT_SECONDARY_CIRCLE_COLOR: Int = Color.DKGRAY
//Both circles
val DEFAULT_CIRCLES_SHADOW_COLOR: Int = Color.BLACK
//bigAverage
val DEFAULT_BIG_AVERAGE_SHADOW_COLOR: Int = Color.BLACK
//smallAverage
val DEFAULT_SMALL_AVERAGE_SHADOW_COLOR: Int = Color.BLACK
//Averages
val DEFAULT_AVERAGE_COLOR: Int = Color.WHITE
//progressArc
val DEFAULT_PROGRESS_ARC_COLOR: Int = Color.WHITE
//progressArcDot
val PROGRESS_ARC_DOT_DEFAULT_COLOR = Color.WHITE
//progressArcContent
val DEFAULT_PROGRESS_ARC_CONTENT_COLOR = Color.WHITE
//particles
val DEFAULT_PARTICLE_COLOR = Color.DKGRAY
//View
var animateInCirclesAnimationDuration = DEFAULT_ANIMATE_IN_CIRCLES_ANIMATION_DURATION
var animateInProgressArcAnimationDuration = DEFAULT_ANIMATE_IN_PROGRESS_ARC_ANIMATION_DURATION
var animateInSecondaryCircleDelay = DEFAULT_ANIMATE_IN_SECONDARY_CIRCLE_DELAY
//Circles
private val primaryCirclePaint: Paint = Paint()
private val secondaryCirclePaint: Paint = Paint()
var primaryCircleCenterDisplacement: Float by InvalidatingProperty(
DEFAULT_PRIMARY_CIRCLE_DISPLACEMENT
)
var secondaryCircleCenterDisplacement: Float by InvalidatingProperty(
DEFAULT_SECONDARY_CIRCLE_DISPLACEMENT
)
var primaryCircleColor: Int
set(value) {
primaryCirclePaint.color = value
invalidate()
}
get() = primaryCirclePaint.color
var secondaryCircleColor: Int
set(value) {
secondaryCirclePaint.color = value
invalidate()
}
get() = secondaryCirclePaint.color
var primaryCircleRadiusSCale: Float by InvalidatingProperty(1F)
var secondaryCircleRadiusScale: Float by InvalidatingProperty(1F)
fun setCirclesShadow(radius: Float, dx: Float, dy: Float, color: Int) {
primaryCirclePaint.setShadowLayer(radius, dx, dy, color)
secondaryCirclePaint.setShadowLayer(radius, dx, dy, color)
}
fun setBigAverageShadow(radius: Float, dx: Float, dy: Float, color: Int) =
bigAveragePaint.setShadowLayer(radius, dx, dy, color)
fun setSmallAverageShadow(radius: Float, dx: Float, dy: Float, color: Int) =
smallAveragePaint.setShadowLayer(radius, dx, dy, color)
//Big Average
private val bigAveragePaint: TextPaint = TextPaint()
var bigAverageText: String by InvalidatingProperty("")
//SmallAverage
private val smallAveragePaint: TextPaint = TextPaint()
var smallAverageText: String by InvalidatingProperty("")
//Both averages
var averageMargin: Float by InvalidatingProperty(DEFAULT_AVERAGE_MARGIN)
var averageColor: Int
get() = bigAveragePaint.color
set(value) {
bigAveragePaint.color = value
smallAveragePaint.color = value
invalidate()
}
//Progress Arc
private val progressArcPaint: Paint = Paint()
var progressArcMargin: Float by InvalidatingProperty(DEFAULT_PROGRESS_ARC_MARGIN)
var progressArcStrokeWidth: Float by InvalidatingProperty(DEFAULT_PROGRESS_ARC_WIDTH)
var progressArcStartAngle: Float by InvalidatingProperty(DEFAULT_PROGRESS_ARC_START_ANGLE)
var progressArcValue: Float by InvalidatingProperty(DEFAULT_PROGRESS_ARC_VALUE)
private val progressArcRectF: RectF = RectF()
//ProgressArcDot
private val progressArcDotPaint = Paint()
var progressArcDotRadius: Float by InvalidatingProperty(DEFAULT_PROGRESS_ARC_DOT_RADIUS)
//Progress Arc Content
private val progressArcContentPaint: TextPaint = TextPaint()
val progressArcContentMargin: Float by InvalidatingProperty(PROGRESS_ARC_CONTENT_DEFAULT_MARGIN)
var progressArcContentColor: Int
set(value) {
progressArcContentPaint.color = value
invalidate()
}
get() = progressArcContentPaint.color
var progressArcContentText: String by InvalidatingProperty(DEFAULT_PROGRESS_ARC_CONTENT_TEXT)
var progressArcContentTextInterline: Float by InvalidatingProperty(
DEFAULT_PROGRESS_ARC_CONTENT_INTERLINE
)
//Particles
private val particlePaint: Paint = Paint()
private val particles: ParticleSet =
ParticleSet(this)
var particlesColor: Int
set(value) {
particlePaint.color = value
invalidate()
}
get() = particlePaint.color
//Util
private val textBoundsRect: Rect = Rect()
private val textBoundsRect2: Rect = Rect()
constructor(context: Context?) : super(context) {
initView(null)
}
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
initView(attrs)
}
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
) {
initView(attrs)
}
constructor(
context: Context?,
attrs: AttributeSet?,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attrs, defStyleAttr, defStyleRes) {
initView(attrs)
}
private fun initView(attrs: AttributeSet?) { //code }
override fun onDraw(canvas: Canvas?) { // code }
最佳答案
将 kotlin-reflect 版本从 1.4.0 更改为 1.3.72 对我有用:
implementation "org.jetbrains.kotlin:kotlin-reflect:1.3.72"
关于android - Kotlin 委托(delegate)属性导致 Android Studio 中出现预览渲染错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63474372/
我的应用程序从一个有 5 个选项卡的选项卡栏 Controller 开始。一开始,第一个出现了它的名字,但其他四个没有名字,直到我点击它们。然后根据用户使用的语言显示名称。如何在选项卡栏出现之前设置选
我有嵌套数组 json 对象(第 1 层、第 2 层和第 3 层)。我的问题是数据表没有出现。任何相关的 CDN 均已导入。该表仅显示部分。我引用了很多网站,但都没有解决我的问题。 之前我使用标准表来
我正在尝试设置要显示的 Parse PFLoginViewController。这是我的一个 View Controller 的类。 import UIKit import Parse import
我遇到了这个问题,我绘制的对象没有出现在 GUI 中。我知道它正在被处理,因为数据被推送到日志文件。但是,图形没有出现。 这是我的一些代码: public static void main(Strin
我有一个树状图,其中包含出现这样的词...... TreeMap occurrence = new TreeMap (); 字符串 = 单词 整数 = 出现次数。 我如何获得最大出现次数 - 整数,
因此,我提示用户输入变量。如果变量小于 0 且大于 10。如果用户输入 10,我想要求用户再次输入数字。我问时间的时候输入4,它说你输入错误。但在第二次尝试时效果很好。例如:如果我输入 25,它会打印
我已经用 css overflow 属性做了一个例子。在这个例子中我遇到了一个溢出滚动的问题。滚动条出现了,但没有工作意味着每当将光标移动到滚动条时,在这个滚动条不活动的时间。我对此一无所知,所以请帮
我现在正在做一个元素。当您单击一个元素时,会出现以下信息,我想知道如何在您单击下一个元素而不重新单击同一元素时使其消失....例如,我的元素中有披萨,我想单击肉披萨看到浇头然后点击奶酪披萨看到浇头和肉
我有一个路由器模块,它将主题与正则表达式进行比较,并将出现的事件与一致的键掩码链接起来。 (它是一个简单的 url 路由过滤,如 symfony http://symfony.com/doc/curr
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: mysql_fetch_array() expects parameter 1 to be resource, bo
我在底部有一个带有工具栏的 View ,我正在使用 NavigationLink 导航到该 View 。但是当 View 出现时,工具栏显示得有点太低了。大约半秒钟后,它突然跳到位。它只会在应用程序启
我试图在我的应用程序上为背景音乐添加一个 AVAudioPlayer,我正在主屏幕上启动播放器,尝试在应用程序打开时开始播放但出现意外行为... 它播放并立即不断创建新玩家并播放这些玩家,因此同时播放
这是获取一个数字,获取其阶乘并将其加倍,但是由于基本情况,如果您输入 0,它会给出 2 作为答案,因此为了绕过它,我使用了 if 语句,但收到错误输入“if”时解析错误。如果你们能提供帮助,我真的很感
暂停期间抛出异常 android.os.DeadObjectException 在 android.os.BinderProxy.transactNative( native 方法) 在 androi
我已经为猜词游戏编写了一些代码。它从用户输入中读取字符并在单词中搜索该字符;根据字符是否在单词中,程序返回并控制一些变量。 代码如下: import java.util.Random; import
我是自动化领域的新手。这是我的简单 TestNG 登录代码,当我以 TestNG 身份运行该代码时,它会出现 java.lang.NullPointerException,双击它会突出显示我导航到 U
我是c#程序员,我习惯了c#的封装语法和其他东西。但是现在,由于某些原因,我应该用java写一些东西,我现在正在练习java一天!我要创建一个为我自己创建一个虚拟项目,以便让自己更熟悉 Java 的
我正在使用 Intellij,我的源类是 main.com.coding,我的资源文件是 main.com.testing。我将 spring.xml 文件放入资源文件中。 我的测试类位于 test.
我想要我的tests folder separate到我的应用程序代码。我的项目结构是这样的 myproject/ myproject/ myproject.py moduleon
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 6 年前。 因此,我尝试比较 2 个值,一个
我是一名优秀的程序员,十分优秀!