ハイク・ナハペトMkrtchyan:
私は初心者だkotlin
が、私は知っていますjava
。私は、私は1つを持っているプログラムを、作成しましたのでtextview
。それはそれのテストフェードアニメーションを持つすべての1秒に変更されます。私のプログラムは正常に動作しますが、そう私は初心者だとしてkotlin
、あなたは私を助けたり、私のコードに関連するフィードバックを与えることができます。私は何かが間違っを書いた場合にも、あなたは何の問題もなく、それを編集することができます:)
class MainActivity : AppCompatActivity() {
private lateinit var fadeInAnimation: Animation
private lateinit var fadeOutAnimation: Animation
private lateinit var handler: Handler
private lateinit var myRunnable: Runnable
private val textArray: Array<String> = arrayOf("This", "is", "fading", "text")
private var textPosition: Int = 0
companion object {
private const val ANIM_DURATION: Long = 1000L
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_in)
fadeOutAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out)
handler = Handler()
initRunnable()
}
override fun onResume() {
super.onResume()
startAnimation()
}
override fun onPause() {
super.onPause()
stopAnimation()
}
private fun initRunnable() {
myRunnable = Runnable {
text_view.animation = fadeOutAnimation
fadeOutAnimation.start()
fadeOutAnimation.setAnimationListener(object : AnimationListener() {
override fun onAnimationEnd(animation: Animation?) {
textPosition = when (textPosition) {
textArray.size - 1 -> 0
else -> ++textPosition
}
startAnimation()
}
})
}
}
private fun startAnimation() {
text_view.text = textArray[textPosition]
text_view.animation = fadeInAnimation
fadeInAnimation.start()
handler.postDelayed(myRunnable, ANIM_DURATION)
}
private fun stopAnimation() {
handler.removeCallbacksAndMessages(null)
fadeInAnimation.cancel()
fadeOutAnimation.cancel()
}
}
私はそれがより明確にすることができ、または多分何かが私がいない右やった、または多分何かが練習ではありませんどのように、私のコードに関連するフィードバックを残してください!ありがとうございました。
Tenfour04:
私は、遅延、フェードインを行うXML内の1つのアニメーションを作成し、フェードアウトでしょう。その後、フェードアウトやジャグリング2つのアニメーションを投稿するハンドラを使用する必要はありません。しかし、以来、私たちはKotlinコードを見ています:
- あなたは再びそれを使用したことがないしている場合のRunnableも財産を持っているために理由はありません。また、あります
postDelayed
あなたは末尾のラムダを使用できるように引数の順番を入れ替え、拡張機能が。(あなたは、代わりにRunnableをを格納することができval
、それが一度だけ@Mostafaからのコメントのようにインスタンス化されますので、私の意見ではそれは些細な小さなだとあなたはそれが使われている場所でそれを維持する場合、コードは明確です。) - あなたがデクリメント簡素化することができ
textPosition
剰余演算子で(また、Javaに適用されます)。 - あなたのコンパニオンオブジェクトは何もなく、プライベート定数を持っていない場合は、コンパニオンオブジェクトは、新しいクラスとしてコンパイルされ、インスタンスが取得しているため、それはクラスの外に移動する方が良いでしょう。
- あなたは一度だけアニメーションリスナーを設定する必要があります。
private const val ANIM_DURATION: Long = 1000L
class MainActivity : AppCompatActivity() {
private lateinit var fadeInAnimation: Animation
private lateinit var fadeOutAnimation: Animation
private lateinit var handler: Handler
private val textArray: Array<String> = arrayOf("This", "is", "fading", "text")
private var textPosition: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_in)
fadeOutAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out).apply {
setAnimationListener(object : AnimationListener() {
override fun onAnimationEnd(animation: Animation?) {
textPosition = (textPosition - 1 + textArray.size) % textArray.size
startAnimation()
}
})
}
handler = Handler()
}
override fun onResume() {
super.onResume()
startAnimation()
}
override fun onPause() {
super.onPause()
stopAnimation()
}
private fun startAnimation() {
text_view.text = textArray[textPosition]
text_view.animation = fadeInAnimation
fadeInAnimation.start()
handler.postDelayed(ANIM_DURATION) {
text_view.animation = fadeOutAnimation
fadeOutAnimation.start()
}
}
private fun stopAnimation() {
handler.removeCallbacksAndMessages(null)
fadeInAnimation.cancel()
fadeOutAnimation.cancel()
}
}
あなたが使用してアニメーション定義した場合にも、ObjectAnimatorの代わりに、古いアニメーションAPIを、あなたが使用することができdoOnEnd
、より不格好匿名AnimationListenerの代わりに。