Jos*_*erg 10 android kotlin kotlin-android-extensions
对于makeSceneTransitionAnimation,有两个静态函数
public static ActivityOptionsCompat makeSceneTransitionAnimation(Activity activity,
View sharedElement, String sharedElementName)
Run Code Online (Sandbox Code Playgroud)
和
public static ActivityOptionsCompat makeSceneTransitionAnimation(Activity activity,
Pair<View, String>... sharedElements)
Run Code Online (Sandbox Code Playgroud)
第一个函数调用在Kotlin中正常工作,但在调用第二个时,这两个调用都会返回错误
val imageTransition = Pair<View, String>(imageView, imageView.getTransitionName());
val textTransition = Pair<View, String>(textView, textView.getTransitionName());
val transitionList = Array(2, { imageTransition });
transitionList[1] = textTransition;
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, *transitionList);
Run Code Online (Sandbox Code Playgroud)
和
val imageTransition = Pair<View, String>(imageView, imageView.getTransitionName());
val textTransition = Pair<View, String>(textView, textView.getTransitionName());
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, imageTransition, textTransition);
Run Code Online (Sandbox Code Playgroud)
是否有正确的方法来实现这一点,或者这是互操作的问题?
编辑 添加的更改以确保它使用相同的类
val imageView : View = view.findViewById(android.R.id.icon);
val textView : View = view.findViewById(android.R.id.text1);
imageView.setTransitionName("imageTransition");
textView.setTransitionName("textTransition")
val imageTransition : android.support.v4.util.Pair<android.view.View, java.lang.String> = android.support.v4.util.Pair.create(imageView, imageView.getTransitionName() as java.lang.String);
val textTransition : android.support.v4.util.Pair<android.view.View, java.lang.String> = android.support.v4.util.Pair.create(textView, textView.getTransitionName() as java.lang.String);
val transitionList = Array(2, { imageTransition });
transitionList[1] = textTransition;
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, *transitionList);
Run Code Online (Sandbox Code Playgroud)
当前编译器错误:
Error:(72, 84) The spread operator (*foo) may only be applied in a vararg position
Error:(72, 99) No value passed for parameter sharedElementName
Run Code Online (Sandbox Code Playgroud)
而另一个
val imageView : View = view.findViewById(android.R.id.icon);
val textView : View = view.findViewById(android.R.id.text1);
imageView.setTransitionName("imageTransition");
textView.setTransitionName("textTransition")
val imageTransition : android.support.v4.util.Pair<android.view.View, java.lang.String> = android.support.v4.util.Pair.create(imageView, imageView.getTransitionName() as java.lang.String);
val textTransition : android.support.v4.util.Pair<android.view.View, java.lang.String> = android.support.v4.util.Pair.create(textView, textView.getTransitionName() as java.lang.String);
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, imageTransition, textTransition);
Run Code Online (Sandbox Code Playgroud)
当前编译器错误:
Error:(72, 84) Type mismatch: inferred type is android.support.v4.util.Pair<android.view.View, java.lang.String> but android.view.View! was expected
Error:(72, 101) Type mismatch: inferred type is android.support.v4.util.Pair<android.view.View, java.lang.String> but kotlin.String! was expected
Run Code Online (Sandbox Code Playgroud)
Ale*_*sso 11
答案是*数组变量之前的符号:
import android.support.v4.util.Pair as AndroidPair
// ...
val pair1 = AndroidPair<View, String>(fab,
getString(R.string.transition_fab))
val pair2 = AndroidPair<View, String>(findViewById(R.id.app_bar),
getString(R.string.transition_appbar))
ActivityOptionsCompat.makeSceneTransitionAnimation(this@MyActivity,
*arrayOf(pair1, pair2)).toBundle();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |