所以在我的应用程序中,我在图像视图上有一个场景转换,将它从一个活动转换到另一个活动:
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(),tracks.class);
i.putExtra("album", al);
ActivityOptions transitionActivityOptions = ActivityOptions.makeSceneTransitionAnimation((item_display) v.getContext(), cover, "pic");
v.getContext().startActivity(i, transitionActivityOptions.toBundle());
}
});
现在,缩放和定位过渡工作正常。但是,在第二个活动的imageview中,我在xml中有一个tint属性,使其更暗(样式选择)。色调没有动画,所以整个效果比我想要的更刺耳。有没有办法让色调像图像的其余部分一样来回平滑过渡?
答案 0 :(得分:1)
使用custom transition。这样的事情。
public class TintTransition extends Transition {
private static final String PROPNAME_TINT = "com.example:TintTransition:tint";
public TintTransition(Context context, AttributeSet attrs) {
super(context, attrs);
}
private void captureValues(TransitionValues values) {
if (values.view instanceof AppCompatImageView) {
values.values.put(PROPNAME_TINT, ((AppCompatImageView) values.view).getImageTintList());
}
}
@Override
public void captureStartValues(TransitionValues transitionValues) {
captureValues(transitionValues);
}
@Override
public void captureEndValues(TransitionValues transitionValues) {
captureValues(transitionValues);
}
@Override
public Animator createAnimator(ViewGroup sceneRoot, final TransitionValues startValues, final TransitionValues endValues) {
if (endValues == null) {
return null;
}
if (!(endValues.view instanceof AppCompatImageView)) {
return null;
}
ColorStateList startColorStateList = (ColorStateList) startValues.values.get(PROPNAME_TINT);
ColorStateList endColorStateList = (ColorStateList) endValues.values.get(PROPNAME_TINT);
final int endColor = endColorStateList.getDefaultColor();
final int startColor = startColorStateList == null
? Color.TRANSPARENT
: startColorStateList.getDefaultColor();
ValueAnimator animator = ValueAnimator.ofObject(new ArgbEvaluator(), startColor, endColor);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Integer color = (Integer) animation.getAnimatedValue();
if (color != null) {
((AppCompatImageView) endValues.view).setImageTintList(ColorStateList.valueOf(color));
}
}
});
return animator;
}
}
如果您需要从XML进行扩充,可以采用以下方法:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<transition class="com.example.transitions.TintTransition" android:duration="400" android:interpolator="@android:interpolator/fast_out_slow_in"/>
</transitionSet>