我已经实现了一个带有翻转复选框(GMail风格)的Android列表视图,如下所示:http://techiedreams.com/gmail-like-flip-animated-multi-selection-list-view-with-action-mode/
我遇到的问题(即使在源代码示例中):如果有多个项目我按快速顺序点击/检查,前一个动画将停止并将被重新显示。换句话说,前一个动画没有完成,并被第二个动画中断。
简单下载源代码并自行尝试。在comparisson中gmail所有动画,无论我点击的速度有多快,都是从开始到结束进行的。
我无法在演示源代码中找到这段代码来改变这种行为。
任何提示?
提前致谢:)
答案 0 :(得分:2)
这是我最接近Gmail的翻转动画:
在getView()方法中(我使用上下文操作模式):
holder.check.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mActionMode == null) {
checked = new SparseBooleanArray(alllists.size());
mActionMode = ((Activity) getActivity()).startActionMode(mActionModeCallback);
animateRow(position);
checked.put(position, true);
mActionMode.setTitle("1");
mActionMode.getMenu().getItem(0).setVisible(true);
} else {
animateRow(position);
if (checked.get(position)) {
checked.put(position, false);
if (checked.indexOfValue(true) < 0) {
mActionMode.finish();
} else {
mActionMode.setTitle(String.valueOf(getCheckedCount()));
}
} else {
checked.put(position, true);
mActionMode.setTitle(String.valueOf(getCheckedCount()));
}
}
}
}
);
然后是animateRow()方法:
private void animateRow(final int position) {
if (position >= listView.getFirstVisiblePosition() && position <= listView.getLastVisiblePosition()) {
Log.i("animateRow", String.valueOf(position));
ScaleAnimation anim = new ScaleAnimation(1, 0, 1, 1, Animation.RELATIVE_TO_SELF, 0.5f, 0, 0);
anim.setDuration(150);
anim.setRepeatCount(1);
anim.setRepeatMode(Animation.REVERSE);
viewa = listView.getChildAt(position - listView.getFirstVisiblePosition());
final Button chkButton = (Button) viewa.findViewById(R.id.logo);
if (checked.get(position)) {
anim.setAnimationListener(
new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
Log.i("anim" + position, "Start");
}
@Override
public void onAnimationRepeat(Animation animation) {
Log.i("anim" + position, "Repeat" + animation.getRepeatCount());
viewa.setBackgroundResource(R.color.row_background);
chkButton.setBackgroundResource(R.color.button_background);
chkButton.setText(String.valueOf(alllists.get(position).itemsCount));
}
@Override
public void onAnimationEnd(Animation animation) {
Log.i("anim" + position, "END");
}
}
);
chkButton.startAnimation(anim);
} else {
anim.setAnimationListener(
new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
Log.i("anim" + position, "Start");
}
@Override
public void onAnimationRepeat(Animation animation) {
viewa.setBackgroundResource(R.color.checked_row_background);
chkButton.setBackgroundResource(R.color.checked_button_background);
chkButton.setText("✓");
}
@Override
public void onAnimationEnd(Animation animation) {
Log.i("anim" + position, "END");
}
}
);
chkButton.startAnimation(anim);
}
}
}
我希望它有所帮助.. :)
答案 1 :(得分:0)
现在你可以忘记翻转视图的方法,因为我已经开发了一个完全可自定义的新库FlipView,这正是你想要的。您可以使用任何类型的动画交换任何类型的视图和布局。
请看一下。