我在屏幕中央有一个圆圈,其中有一个a[i] = ch
+ ImageView
。我还有两个TextView
+ ImageView
,一个在屏幕顶部,另一个在屏幕底部。
我的要求是:
我想要顶部TextView
+ ImageView
的副本和底部TextView
+ ImageView
的副本,以便将动画移动到圆圈的中心,从而更改圆圈内textView的值。
例如:
假设顶部textView的值为200,底部textview的值为300.我希望这些值的一部分(比如100或150)动画并移动到圆圈中,但原始值200和300应保持在同一位置
我尝试过使用TextView
。但是我遇到了找到中心圆的x和y坐标的问题。它并不完全是圆圈的中心。原始TranslateAnimation
位置也不会保留。
view's
startLayout是ImageView和TextView所在的linearlayout。 请帮忙!谢谢!
答案 0 :(得分:3)
我有同样的问题,我使用下一个代码修复(抱歉在Kotlin,但在Java中的工作原理相同)。让我们说viewFirst想要达到viewTwo位置:
(DON' T使用):
from x in JustMyCode.Members
where (x.IsMethod && x.AsMethod.IsPropertyGetter &&
x.AsMethod.ReturnTypeIs("System.String")) ||
(x.IsField && x.AsField.FieldTypeIs("System.String"))
select x
(使用此解决方案):
viewFirst.animate()
.translationX(viewSecond.x)
.translationY(viewSecond.y)
.setDuration(1000)
.withEndAction {
//to make sure that it arrives,
//but not needed actually these two lines
viewFirst.x = viewSecond.x
viewFirst.y = viewSecond.y
}
.start()
答案 1 :(得分:0)
使用getX()
和getY()
方法以像素为单位定义视图的位置,但您使用的构造函数定义的Float类型值必须为0.0f至1.0f
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
这是另一个使用视图的像素位置的选项:
viewFirst.animate()
.x(viewSecond.getX())
.y(viewSecond.getY())
.setDuration(1000).withEndAction(new Runnable() {
@Override
public void run() {
viewFirst.setX(tv2.getX());
viewFirst.setY(tv2.getY());
}
}).start();