В настоящее время я пытаюсь создать универсальный метод для наложения анимации. Работает следующим образом: передача активности в качестве параметра -> метод присоединяет необходимые представления к корневому представлению действия, делает его недействительным и запускает в этом случае вращающуюся анимацию. Однако шарнир анимации не применяется для правильного просмотра, все работает, кроме этого, поэтому он просто вращается из X и Y просмотра, что неверно.
Метод:
fun createLoading(activity: Activity, activityWidth: Int): Animation {
val loadingAnimation = AnimationUtils.loadAnimation(activity, R.anim.animation_loading_rotate)
val parent = activity.window.decorView.findViewById<ViewGroup>(android.R.id.content)
val loadingBg = ImageView(activity)
loadingBg.tag = "customLoadingBg"
loadingBg.layoutParams = ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.MATCH_PARENT)
loadingBg.visibility = View.VISIBLE
loadingBg.setImageResource(R.drawable.darken_background)
val loadingImage = ImageView(activity)
loadingImage.tag = "customLoadingImage"
loadingImage.setImageResource(R.drawable.icon_web)
loadingImage.visibility = View.VISIBLE
loadingImage.layoutParams = ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT) //TODO pivot doesn't work. Again...
loadingImage.layoutParams.width = (activityWidth * 0.1).toInt()
loadingImage.layoutParams.height = (activityWidth * 0.1).toInt()
loadingImage.pivotX = (activityWidth * 0.05).toFloat()
loadingImage.pivotY = (activityWidth * 0.05).toFloat()
loadingImage.x = ((activityWidth / 2 - (activityWidth * 0.1 / 2).toInt()).toFloat())
loadingImage.y = 0f
parent.addView(loadingBg)
parent.addView(loadingImage)
loadingAnimation!!.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationRepeat(animation: Animation?) {
}
override fun onAnimationEnd(animation: Animation?) {
parent.removeView(parent.findViewWithTag<ImageView>("customLoadingImage"))
parent.removeView(parent.findViewWithTag<FrameLayout>("customLoadingBg"))
}
override fun onAnimationStart(animation: Animation?) {
loadingBg.alpha = 0.5f
loadingImage.pivotX = (activityWidth * 0.05).toFloat()
loadingImage.pivotY = (activityWidth * 0.05).toFloat()
Log.d("loadingimg_pivotX", loadingImage.pivotX.toString())
loadingBg.bringToFront()
loadingImage.bringToFront()
}
})
loadingImage.post {
activity.runOnUiThread {
parent.invalidate()
parent.getChildAt(parent.childCount - 1).startAnimation(loadingAnimation)
}
}
return loadingAnimation
}
КакВы можете видеть, что я даже пытался поместить его в метод onAnimationStart анимации, но это не работает. Я даже пытался использовать предопределенную XML-анимацию и применять к представлению, но ни один из них не сработал для меня. Цените любые идеи.
РЕДАКТИРОВАТЬ: Декларация R.anim.animation_loading_rotate
android:duration="750"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:toDegrees="360"