这可能是一个基本问题,或者我可能让我的项目超出了我的能力范围,但我确实需要帮助,因为这让我花了几个小时搜索和尝试他人的代码。
我的活动包括使用ViewPager2的三个片段,我将称它们为Fragment A、B和C。其中,Fragment B将加载另外数量不确定的片段。我将其称为Fragment X1、X2……可能是X99等。这些片段是使用打字机效果的地方,所以我将文本动画函数放置在Fragment B上,因为我认为它最好是在加载片段的地方而不是每个Fragment Xn都有它。
fun TextView.textDisplay(text: Int) {
val targetstring: Int = text
if(textanim) {
for(i in 1..targetstring){
println(targetstring.toString()[i])
Thread.sleep(textanimspeed.toLong())
} // Typewriter effect
} else {
println(targetstring)
} // display texts at once
}
Fragment B中还有一些值,我计划用它们来设置文本的大小、动画速度以及是否要进行动画。
var textsize:Byte = 10
var textanimspeed:Byte = 100
var textanim: Boolean = true
然后尝试加载 X1 片段。
(activity as FragmentB).TextView1.textDisplay(R.string.stringX1)
原来这行代码是无法到达的,"textDisplay" 是一个"未解决的引用"。
如果我移除 textDisplay(text: Int) 的接收器参数 "TextView" 并且执行代码,Android Studio 就不会显示它是未解决的了,但它仍然是无法到达的。最重要的是,我相信文本必须在 TextView 中进行动画处理。运行应用程序将不会显示任何文本。
第二件我尝试的事情是复制打字机效果的 Java 代码并将其粘贴,以便 Android Studio 自动将其转换为 Kotlin。结果有一些红色的东西,但我摆脱了它。我创建了一个新的类 "TypeWriterView.kt",其中包含以下代码:
class TypeWriterView: AppCompatTextView {
private var mText: CharSequence? = null
private var mIndex = 0
private var mDelay: Long = 150 // in ms
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
private val mHandler: Handler = Handler()
private val characterAdder: Runnable = object : Runnable {
override fun run() {
text = mText!!.subSequence(0, mIndex++)
if (mIndex <= mText!!.length) {
mHandler.postDelayed(this, mDelay)
}
}
}
fun animateText(txt: CharSequence?) {
mText = txt
mIndex = 0
text = ""
mHandler.removeCallbacks(characterAdder)
mHandler.postDelayed(characterAdder, mDelay)
}
fun setCharacterDelay(m: Long) {
mDelay = m
}
}
并在 Fragment X1 中尝试了它。
Sc_X1_tv01.setText(R.string.stringX1)
Sc_X1_tv01.setCharacterDelay(150)
Sc_X1_tv01.animateText("${R.string.stringX1}")
这段代码没有红色错误提示,但仍然无法运行并且没有显示任何文本。
我现在卡在这一步,需要帮助。感谢阅读和任何帮助。
implementation "androidx.fragment:fragment-ktx:1.2.5"
。 - undefined