我正在使用Android Lollipop Transitions,我总结了以下问题:
CardView
ImageView
,TextView
,ImageView
。TextView
和TextView
。Transition
中的ImageView
作为共享元素包含在内,那么ImageView
突然消失了Transition
,这看起来并不好,很好,很棒ChangeBounds
,它是Transition
ChangeImageTransform
,Activity
,...等的组合。)那么,任何人都知道在启动新的 public value struct DeviceInfo
{
Byte DeviceCompatibility;
Size imageSize;
static initonly DeviceInfo Empty = { (Size::Empty, 0 ) };
};
时如何为不同的共享视图抛出不同的转换?
干杯
答案 0 :(得分:0)
行,
这可以实现扩展Transition类。由于我想要对ImageView和TextView进行不同的动画制作,我只是编写了一个TextTransform
子类Transform
,类似于ChangeImageTransform
子类,它是Android API 21+的一部分。关键是重写了这个方法(显示了查找ImageView
个对象的ChangeImageTransform的情况):
@Override
private void captureValues(TransitionValues transitionValues) {
View view = transitionValues.view;
if (!(view instanceof ImageView) || view.getVisibility() != View.VISIBLE) {
return;
}
(...)
}
然后将所有变换应用于新场景,相关变换将附加到相应的视图:
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<fade android:fadingMode="fade_out" />
<changeBounds />
<changeImageTransform />
<com.mypackage.transforms.TextTransform />
<fade android:fadingMode="fade_in" />
</transitionSet>
然后使用Transition
Activity
的OnCreate方法上设置此setSharedElementEnterTransition(inflatedTransitionSet);
答案 1 :(得分:0)
您在答案中指出的方式可以用于此目的,但实际上是通过特殊的View
仅接受适当的transition
类型(例如,仅ImageView
ChangeImageTransform
。
您可以改为使用 addTarget(Class targetType)
:
final Transition transition = new TransitionSet()
.addTransition(new ChangeTransform()).addTarget(TextView.class) // Only for TextViews
.addTransition(new ChangeImageTransform()).addTarget(ImageView.class) // Only for ImageViews
.addTransition(new ChangeBounds()); // For both
setSharedElementEnterTransition(transition);
这种方式更简单,更合乎逻辑。另外,它还可用于其他一些过滤(transitionName
等)。请参阅addTarget()
重载类型。