我知道获取 View 位置值的多种方法。
getLocationOnScreen()
getLocationInWindow()
getLeft()
但是,它们都不实际返回我通过startAnimation()方法移动的View的当前位置,而仅返回原始位置。
因此,现在让我们创建一个View,它在每次Click时向右移动10个像素(我省略了布局,因为您可以将任何 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 here的问题类似。动画基本上与View本身是分开的,即Android为View的动画设置动画。这就是getLocationOnScreen()
始终返回0的原因。不是移动(动画)的 View ,而是移动(动画)的副本。如果您看到我的问题的答案,则此问题已在更高版本的Android中解决。