我知道多种获取 View 位置值的方法。
getLocationOnScreen()
getLocationInWindow()
getLeft()
但是,它们实际上都没有返回我通过 startAnimation() 方法移动的 View 的当前位置,而只是返回原始位置。
那么,现在让我们制作一个每次点击时向右移动 10 像素的 View (我省略了布局,因为您可以将任何 View 放在主 XML 中并将其赋予 onClickListener)。
public class AndroidTestActivity extends Activity implements OnClickListener {
LinearLayout testView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
testView = (LinearLayout) this.findViewById(R.id.test);
testView.setOnClickListener(this);
}
public void onClick(View v) {
int[] pLoS = new int[2];
testView.getLocationOnScreen(pLoS);
TranslateAnimation move = new TranslateAnimation(pLoS[0], pLoS[0] + 10, 0f, 0f);
move.setFillAfter(true);
move.setFillEnabled(true);
testView.startAnimation(move);
}
}
如您所见,这并没有像我预期的那样工作,因为 getLocationOnScreen() 总是返回相同的值(在我的例子中为 0),并且没有反射(reflect)我在 TranslateAnimation 中使用的值...
有什么想法吗?
最佳答案
假设您使用的是 Android < 3.0,那么您的问题可能与我的问题类似 here .基本上动画与 View 本身是分开的,即 Android 为您的 View 副本设置动画。这就是 getLocationOnScreen()
总是返回 0 的原因。移动的不是 View (动画),而是移动的副本(动画)。如果您看到我的问题的答案,此问题已在更高版本的 Android 中得到解决。
关于Android: 有没有办法获取TranslateAnimation后View的最新位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11064388/