我正在学习android中的动画。
我试图构建一个网格视图,当用户每点击两个项目(比如糖果粉碎),项目就会切换位置。
下面是我使用的代码
myGrid = (GridView) mainView.findViewById(R.id.my_grid);
myGrid.setAdapter(adapter);
myGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
if(mVPosition == null){
mVPosition = position;
}
else{
View item1View = v;
View item2View = myGrid.getChildAt(mVPosition);
int originalPos1[] = new int[2];
item1View.getLocationOnScreen( originalPos1 );
int originalPos2[] = new int[2];
item2View.getLocationOnScreen( originalPos2 );
swVId = mThumbIds[position];
mThumbIds[position] = mThumbIds[mVPosition];
mThumbIds[mVPosition] = swVId; // Swap items' image
// mThumbIds is used as image source of myGrid define in adapter code
item1View.animate().x(originalPos1[0]).y(originalPos1[1]).setListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
adapter.notifyDataSetChanged();
}
@Override
public void onAnimationCancel(Animator animation) {
}
});
item2View.animate().x(originalPos2[0]).y(originalPos2[1]).setListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
adapter.notifyDataSetChanged();
}
@Override
public void onAnimationCancel(Animator animation) {
}
});
mVPosition = null;
}
});问题是项目在y方向上的移动不正确。如果我只让它们水平移动,有两个项目会交换位置,但如果我想垂直切换,它们都会向下移动到网格上的某个奇怪位置
而且,移动的项目不能再次单击。
这个问题是否与"adapter.notifyDataSetChanged();“和ViewPropertyAnimation的使用有关?
谢谢
发布于 2015-01-20 13:21:22
您必须首先通过getLocationOnScreen方法定义网格视图位置,然后从每个项目中减去它,如下所示
int gridLoc[] = new int[2];
myGrid.getLocationOnScreen(gridLoc);
.
.
.
item1View.animate().x(originalPos1[0]-gridLoc[0]).y(originalPos1[1]-gridLoc[1])....
.
.
.
item2View.animate().x(originalPos2[0]-gridLoc[0]).y(originalPos2[1]-gridLoc[1])....https://stackoverflow.com/questions/18521937
复制相似问题