我知道获取 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中解决。

10-08 02:19