私はアンドロイドでアニメーションを学んでいます。
グリッド ビューを構築し、ユーザーが 2 つのアイテムごとにクリックしたときにアイテムの位置を切り替えようとしていました (キャンディー クラッシュのように)。
これが私が使用しているコードです
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 方向に正しく移動しないことです。横方向にのみ移動させると、2 つのアイテムの位置が入れ替わりますが、縦方向に移動させたい場合は、すべてグリッド上の奇妙な場所に移動します
また、移動した項目は再度クリックできません。
この問題は、「adapter.notifyDataSetChanged();」の使用と関係がありますか? と ViewPropertyAnimation?
ありがとう