首页 > 解决方案 > 如何为文本视图(文本大小)的共享元素转换进行自定义转换

问题描述

我正在尝试在 36sp textSize 的 TextView 到 24sp textSize 的 TextView 的两个活动之间进行共享转换,但它无法正常工作,因为当动画开始时,textsize 在下一帧中转换为 24sp 大小。

这是 SharedElement 转换开始的活动

MainActivity.kt

class MainActivity : AppCompatActivity() {

    private var shortAnimationDuration: Int = 500

   override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)


    val companyNameMainActivity = findViewById<TextView>(R.id.companyNameMainActivity)
    companyNameMainActivity.tag = "companyNameMainActivity"
    // Log.e(TAG, companyNameMainActivity.tag as String)
    //window.sharedElementExitTransition = TextViewTransition()
    //window.sharedElementEnterTransition = TextViewTransition()
    setEnterSharedElementCallback(EnterSharedElementCallback(this))

    companyNameMainActivity.apply {
        alpha = 0f
        visibility = View.VISIBLE

        animate()
            .alpha(1f)
            .setDuration(shortAnimationDuration.toLong())
            .setListener(object : AnimatorListenerAdapter() {
                override fun onAnimationEnd(animation: Animator) {
                    startActivity(
                        Intent(this@MainActivity, AuthActivity::class.java),
                        ActivityOptions.makeSceneTransitionAnimation(
                            this@MainActivity,
                            UtilPair(
                                findViewById<ImageView>(R.id.companyNameMainActivity),
                                AuthActivity.COMPANY_NAME
                            ),
                        ).toBundle()
                    )
                }
            })
    }

   }

override fun onStop() {
    super.onStop()
    finishAfterTransition()
}

companion object {
    const val TAG = "MainActivity"
}

}

这是 SharedElement 过渡结束的活动

AuthActivity.kt

class AuthActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_auth)


        // window.sharedElementExitTransition = TextViewTransition()
        // window.sharedElementEnterTransition = TextViewTransition()
        setEnterSharedElementCallback(EnterSharedElementCallback(this))

        ViewCompat.setTransitionName(findViewById(R.id.companyNameAuthActivity), COMPANY_NAME)
    }

    // todo improve backPress

    override fun onBackPressed() {
        overridePendingTransition(0,0)
        finish()
    }

    companion object {
        const val TAG = "AuthActivity"
        const val COMPANY_NAME = "COMPANY_NAME";
    }
}

标签: androidtextviewandroid-animationandroid-transitionsshared-element-transition

解决方案


推荐阅读