我正在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有关?
感谢
您必须首先通过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])....