我正在尝试在我的应用程序中实现聊天。我已经设法让一切工作,onClick自定义布局打开,这是一个相对布局与webview和一些按钮。当点击同时打开定义的布局时,聊天头移动到右上角。 现在我面临的唯一问题是聊天室翻译,当它移动到右上角时,它没有顺利过渡,因为我没有给它任何动画,我不知道如何。 我搜索了一个mwthod并找到了我尝试使用的ValueAnimator。
private ValueAnimator mMoveEdgeAnimator;
mParams.y = goalPositionY;
mMoveEdgeAnimator = ValueAnimator.ofInt(currentX, goalPositionX);
mMoveEdgeAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mParams.x = (Integer) animation.getAnimatedValue();
mWindowManager.updateViewLayout(FloatingView.this, mParams);
}
});
mMoveEdgeAnimator.setDuration(MOVE_TO_EDGE_DURATION);
mMoveEdgeAnimator.setInterpolator(mMoveEdgeInterpolator);
mMoveEdgeAnimator.start();
但它仅适用于X或Y中的一个轴,它在屏幕上看起来不是无缝的,我希望它对角转换类似于facebook chathead对onClick的反应。
如何对角翻译?另外如何在windowManager.addView()上应用增长动画?
提前致谢!!
答案 0 :(得分:1)
您可以使用属性值持有者在x和y之间制作动画。
public void animate(final View v, int startX, int endX, int startY, int endY) {
PropertyValuesHolder pvhX = PropertyValuesHolder.ofInt("x", startX, endX);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofInt("y", startY, endY);
ValueAnimator translator = ValueAnimator.ofPropertyValuesHolder(pvhX, pvhY);
translator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
WindowManager.LayoutParams layoutParams = (WindowManager.LayoutParams) v.getLayoutParams();
layoutParams.x = (Integer) valueAnimator.getAnimatedValue("x");
layoutParams.y = (Integer) valueAnimator.getAnimatedValue("y");
windowManager.updateViewLayout(v, layoutParams);
}
});
translator.setDuration(100);
translator.start();
}